Objectiu:
En l’entorn Shibboleth que hem muntat en les dues entrades anteriors (idp, sp) desitgem passar atributs des del directori LDAP mitjançant l’idp fins el sp que els sol·licita.
Procediment:
Aquest pas a pas no requereix cap instal·lació de programari addicional. L’única cosa que hem de fer és configurar les diferents parts del sistema d’acord amb les nostres necessitats.
Configuració de l’sp:
El primer que farem és configurar l’sp per tal que escolti per tota una sèrie d’atributs LDAP estàndard com ara el nom sencer (cn), el nom (givenName), el cognom (sn) i l’adreça de correu (mail). En aquest arxiu haurem de descomentar tots els atributs que necessitem.
$ pico /etc/shibboleth/attribute-map.xml
...
<Attribute name="urn:mace:dir:attribute-def:cn" id="cn"/>
<Attribute name="urn:mace:dir:attribute-def:sn" id="sn"/>
<Attribute name="urn:mace:dir:attribute-def:givenName" id="givenName"/>
<Attribute name="urn:mace:dir:attribute-def:mail" id="mail"/>
...
<Attribute name="urn:oid:2.5.4.3" id="cn"/>
<Attribute name="urn:oid:2.5.4.4" id="sn"/>
<Attribute name="urn:oid:2.5.4.42" id="givenName"/>
<Attribute name="urn:oid:0.9.2342.19200300.100.1.3" id="mail"/>
...
En aquest cas s’han activat els atributs per les dues versions de SAML, segons estan configurats a l’idp.
Finalment només cal reiniciar el servei shibd:
$ service shibd restart
Configuració de l’idp:
En aquest cas s’han de modificar dos arxius.
En el primer ($IDP_HOME/conf/attribute-resolver.mxl) escollirem QUINS atributs volem recuperar de l’LDAP i, de nou, configurarem un connexió a l’LDAP independent de la que utilitzem per l’autenticació.
$ pico $IDP_HOME/conf/attribute-resolver.mxl
...
<resolver:AttributeDefinition xsi:type="ad:Simple" id="email" sourceAttributeID="mail">
<resolver:Dependency ref="myLDAP" />
<resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:mail" />
<resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:0.9.2342.19200300.100.1.3" friendlyName="mail" />
</resolver:AttributeDefinition>
...
<resolver:AttributeDefinition xsi:type="ad:Simple" id="commonName" sourceAttributeID="cn">
<resolver:Dependency ref="myLDAP" />
<resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:cn" />
<resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.3" friendlyName="cn" />
</resolver:AttributeDefinition>
<resolver:AttributeDefinition xsi:type="ad:Simple" id="surname" sourceAttributeID="sn">
<resolver:Dependency ref="myLDAP" />
<resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:sn" />
<resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.4" friendlyName="sn" />
</resolver:AttributeDefinition>
...
<resolver:AttributeDefinition xsi:type="ad:Simple" id="givenName" sourceAttributeID="givenName">
<resolver:Dependency ref="myLDAP" />
<resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:givenName" />
<resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.42" friendlyName="givenName" />
</resolver:AttributeDefinition>
...
<!-- Example LDAP Connector -->
<resolver:DataConnector id="myLDAP" xsi:type="dc:LDAPDirectory"
ldapURL="ldap://ldap.domain.org"
baseDN="dc=domain,dc=org"
principal="cn=binduser,dc=domain,dc=org"
principalCredential="password">
<dc:FilterTemplate>
<![CDATA[
(uid=$requestContext.principalName)
]]>
</dc:FilterTemplate>
</resolver:DataConnector>
...
La resta ho podem deixar comentat tal i com està.
NOTA: De nou, la configuració per Active Directory és una mica diferent:
...
<!-- Example LDAP Connector -->
<resolver:DataConnector id="myLDAP" xsi:type="dc:LDAPDirectory"
ldapURL="ldap://ad.domain.org:3268"
baseDN="dc=domain,dc=org"
principal="cn=binduser,dc=domain,dc=org"
principalCredential="password">
<dc:FilterTemplate>
<![CDATA[
(samaccountname=$requestContext.principalName)
]]>
</dc:FilterTemplate>
</resolver:DataConnector>
...
En el segon arxiu ($IDP_HOME/conf/attribute-filter.mxl) escollirem A QUI volem enviar els atributs.
$ pico $IDP_HOME/conf/attribute-filter.mxl
...
<afp:AttributeFilterPolicy>
<afp:PolicyRequirementRule xsi:type="basic:AttributeRequesterString" value="https://sp.domain.org/shibboleth" />
<afp:AttributeRule attributeID="givenName">
<afp:PermitValueRule xsi:type="basic:ANY" />
</afp:AttributeRule>
<afp:AttributeRule attributeID="commonName">
<afp:PermitValueRule xsi:type="basic:ANY" />
</afp:AttributeRule>
<afp:AttributeRule attributeID="surname">
<afp:PermitValueRule xsi:type="basic:ANY" />
</afp:AttributeRule>
<afp:AttributeRule attributeID="email">
<afp:PermitValueRule xsi:type="basic:ANY" />
</afp:AttributeRule>
</afp:AttributeFilterPolicy>
...
Finalment només cal reiniciar el servei tomcat6:
$ service tomcat6 restart
Comprovació:
Si duem a terme de nou l’autenticació d’un client tot hauria de seguir funcionant com abans, amb la novetat que si ara accedim a la pàgina https://sp.domain.org/Shibboleth.sso/Session veurem certa informació sobre els atributs rebuts. Si és així tot ha anat bé.
Documentació:
Igual que en les entrades anterior deixo l’enllaç a la wiki de shibboleth: https://wiki.shibboleth.net/confluence/display/SHIB2/Home