LDAP jako uložiště atributů (Shibboleth IdP 1.3)

Úvod

V případě, že chceme atributy uživatelů získavat pro náš identity provider z LDAP, je potřeba v příslušném konfiguračním souboru (resolv.xml, resolv.ldap.xml, …) definovat tzv. LDAP Data Connector. Typická konfigurace vypadá takto:

  <JNDIDirectoryDataConnector id="directory">
    <Search filter="uid=%PRINCIPAL%">
      <Controls searchScope="SUBTREE_SCOPE" returningObjects="false" />
    </Search>
    <Property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
    <Property name="java.naming.provider.url" value="ldap://ldap.domena.cz/dc=org,dc=cz" />
  </JNDIDirectoryDataConnector>

V tomto jednoduchém případě aplikace provede anonymní bind k serveru ldap.domena.cz a v podstromu dc=org,dc=cz vyhledá uživatele pomocí filtru uid=%PRINCIPAL%, kde %PRINCIPAL% je substituce pro uživatelské jméno.

Je potřeba také definovat, jaké atributy chceme použít. U jednotlivých atributů uvádíme jejich identifikátor a také odkaz na data konektor, pomocí kterého lze atribut získat:

  <SimpleAttributeDefinition id="urn:mace:dir:attribute-def:cn">
    <DataConnectorDependency requires="directory"/>
  </SimpleAttributeDefinition>

LDAP po SSL

Aby mohl IdP komunikovat s LDAP serverem po SSL, je potřeba importovat CA certifikát, kterým byl podepsán certifikát LDAP serveru, do uložiště klíčů nebo-li tzv. default java keystore. K tomulze použít utilitu keytool, která je součást JDK. Pokud je certifikát v pem formátu, převedeme ho do der formátu:

# openssl x509 -outform der -in ldap-cacert.pem -out ldap-cacert.der

A přidáme ho do uložiště:

# keytool -import -file ldap-cacert.der -alias LDAP-CA -keystore $JAVA_HOME/jre/lib/security/cacerts

Pro manipulaci s uložištěm potřebujeme znát heslo. Pokud jsme s uložištěm ještě nepracovali, pravděpodobně bude fungovat výchozí heslo, které je changeit.

Pak v konfiguraci LDAP konektoru stačí změnit v URL serveru hodnotu protokolu z ldap na ldaps:

  <JNDIDirectoryDataConnector id="directory">
    <Search filter="uid=%PRINCIPAL%">
      <Controls searchScope="SUBTREE_SCOPE" returningObjects="false" />
    </Search>
    <Property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
    <Property name="java.naming.provider.url" value="ldaps://ldap.domena.cz/dc=org,dc=cz" />
  </JNDIDirectoryDataConnector>

Jak reprezentovat členství ve skupinách jako uživatelský atribut

Skupiny v LDAP jsou obvykle umístěné ve zvláštním podstromu, např. ou=groups,dc=org,dc=cz. Název skupiny se standardně ukládá do atributu cn a členové skupiny do vícenásobného atributu uniquemember formou DN (distinguished name, např. uid=novak,ou=people,dc=org,dc=cz). Abychom získali seznam skupin, ve kterých je daný uživatel, musíme se dotázat filtrem uniquemember=uid=novak,ou=people,dc=org,dc=cz do podstromu ou=groups,dc=org,dc=cz. V resolveru toho dosáhneme tím, že nadefinujeme další LDAP konektor závislý na tom prvním:

  <JNDIDirectoryDataConnector id="directorygroup" mergeMultipleResults="true">
    <DataConnectorDependency requires="directory"/>
    <Search filter="uniquemember=uid=%PRINCIPAL%,ou=people,dc=org,dc=cz">
      <Controls searchScope="SUBTREE_SCOPE" returningObjects="false" />
    </Search>
    <Property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
    <Property name="java.naming.provider.url" value="ldaps://ldap.domena.cz/ou=groups,dc=org,dc=cz" />
  </JNDIDirectoryDataConnector>

Atribut mergeMultipleResults je potřeba nastavit na true, jinak v případě více výsledků (uživatel je ve více skupinách) vyhodí IdP vyjímku. Zbývá jen nadefinovat atribut, závislý na tento konektor:

  <SimpleAttributeDefinition id="urn:mace:cesnet.cz:attribute-def:isMemberOf" sourceName="cn">
    <DataConnectorDependency requires="directorygroup"/>
  </SimpleAttributeDefinition>

Reference

cztestfed/howto/idp/config/ldap/index.txt · Poslední úprava: 2008-10-01 16:31 (upraveno mimo DokuWiki)
CESNET2 powered
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0