Dies ist eine alte Version des Dokuments!


Im Kontext von Forschungsprojekten/-Infrastrukturen und Fachinformationsdiensten besteht häufig das Bedürfnis, dienstspezifische Zugangsberechtigungen (Entitlements) für einzelne Personen oder Personengruppen zu vergeben. Da solche Informationen üblicherweise nicht im Identity Management System der jeweiligen Heimateinrichtung gepflegt werden können und/oder sollen, müssen zur Autorisierung weitere Attributquellen, sog. Attribute Authorities eingebunden werden, in denen Community- bzw. Projekt-spezifische Attribute verwaltet werden. Um das Mapping zwischen dem/der bei der jeweiligen Heimateinrichtung angemeldeten Nutzer(in) und diesen Attributen herzustellen ist ein global gültiger, eindeutiger Identifier erforderlich, z.B. eduPersonPrincipalName, eMail-Adresse oder eduPersonUniqueId (neu, 2013). Das letztgenannte Attribut hat den Vorteil, dass es sich um einen pseudonymen Identifier handelt, d.h. von SP-Seite aus kann nicht auf die dahinter liegende Identität rückgeschlossen werden.

/opt/shibboleth-idp/conf/attribute-resolver.xml
<resolver:AttributeDefinition xsi:type="ad:Script" id="eduPersonUniqueId">
    <resolver:Dependency ref="staticAttributes" />
    <resolver:Dependency ref="uid" />
    <resolver:DisplayName xml:lang="en">Unique ID</resolver:DisplayName>
    <resolver:DisplayName xml:lang="de">Eindeutige ID</resolver:DisplayName>
    <resolver:DisplayDescription xml:lang="en">Unique ID: A unique identifier 
       for a person, mainly for inter-institutional user identification</resolver:DisplayDescription>
    <resolver:DisplayDescription xml:lang="de">Eindeutige Nutzerkennung</resolver:DisplayDescription>
    <resolver:AttributeEncoder xsi:type="enc:SAML2String"
              name="urn:oid:1.3.6.1.4.1.5923.1.1.1.13" friendlyName="eduPersonUniqueId" />
    <ad:Script><![CDATA[
        // Java 7:
        //importPackage(Packages.org.apache.commons.codec.digest);
        // Java 8:
        DigestUtils = Java.type("org.apache.commons.codec.digest.DigestUtils");
 
        // um Java-Versions-unabhängig zu sein wird das SAML-Attribut nicht
        // hier im Script initialisiert sondern per Static-Data-Connector
        // weiter unten in dieser Datei.
        // Der Dummy-Wert von der Initialisierung muss hier nur noch
        // gelöscht werden:
        eduPersonUniqueId.getValues().clear();
 
        // unique value erzeugen
        uniqueValue = uid.getValues().get(0) + "SALT_MIN_48_CHARS";
 
        // md5 value erzeugen
        localpart = DigestUtils.md5Hex(uniqueValue);
 
        // Scope dazu
        eduPersonUniqueId.getValues().add(localpart + "@%{idp.scope}");     
        ]]>
    </ad:Script>
</resolver:AttributeDefinition>
 
<!-- ... -->
 
<!-- ========================================== -->
<!--      Data Connectors                       -->
<!-- ========================================== -->
 
<resolver:DataConnector id="staticAttributes" xsi:type="dc:Static">
    <!-- ... -->
    <!-- kleiner Trick um Java-Versions-unabhängig Attribut-Variablen für
         die Scripted-Attribute-Definitionen in dieser Datei zu
         initialisieren -->
    <dc:Attribute id="eduPersonUniqueId">
        <dc:Value>dummy</dc:Value>
    </dc:Attribute>
</resolver:DataConnector>
  • Zuletzt geändert: vor 3 Jahren