Pas d’atributs en un entorn Shibboleth

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