Die eduPersonUniqueId
ist ein eindeutiger, pseudonymer Identifier (siehe die Spezifikation).
Ein Einsatzszenario für die eduPersonUniqueId ist das Mapping zwischen IdPs und Attribute Authorities.
Die Attribute, die eine Attribut Authority verwaltet, müssen über einen global gültigen, eindeutigen Identifier auf die Accounts der Heimateinrichtungen gemappt werden. Dazu können z.B. eduPersonPrincipalName
, mail
oder eduPersonUniqueId verwendet werden.
Die eduPersonUniqueId
hat den Vorteil, dass sie pseudonym ist: Von SP-Seite aus kann nicht auf die dahinter liegende Identität rückgeschlossen werden.
<AttributeDefinition xsi:type="ScriptedAttribute" id="eduPersonUniqueId"> <InputAttributeDefinition ref="uid" /> <DisplayName xml:lang="en">Unique ID</DisplayName> <DisplayName xml:lang="de">Eindeutige ID</DisplayName> <DisplayDescription xml:lang="en">Unique ID: A unique identifier for a person, mainly for inter-institutional user identification</DisplayDescription> <DisplayDescription xml:lang="de">Eindeutige Nutzerkennung</DisplayDescription> <AttributeEncoder xsi:type="SAML2String" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.13" friendlyName="eduPersonUniqueId" /> <Script><![CDATA[ DigestUtils = Java.type("org.apache.commons.codec.digest.DigestUtils"); // unique value erzeugen uniqueValue = uid.getValues().get(0) + "SALT_MIN_48_CHARS"; // md5 value erzeugen localpart = DigestUtils.md5Hex(uniqueValue); // Scope anhängen eduPersonUniqueId.getValues().add(localpart + "@%{idp.scope}"); ]]> </Script> </AttributeDefinition>
Alternativ können Sie auch einen ähnlichen Weg wie oben gehen. Damit das Attribut hier von der Attribute Registry verarbeitet werden kann, können Sie so ein neues scoped Attribut erzeugen, das dann von der Registry mit den richtigen Transcoder verarbeitet wird.
<AttributeDefinition id="eduPersonUniqueId" xsi:type="ScriptedAttribute"> <InputAttributeDefinition ref="uid" /> <Script><![CDATA[ var ScopedValue = Java.type("net.shibboleth.idp.attribute.ScopedStringAttributeValue"); var DigestUtils = Java.type("org.apache.commons.codec.digest.DigestUtils"); // unique value erzeugen (do not change salt) var uniqueValue = uid.getValues().get(0) + "SALT_MIN_48_CHARS"; // md5 value erzeugen var idSaltHash = DigestUtils.md5Hex(uniqueValue); // Scope dazu eduPersonUniqueId.getValues().add(new ScopedValue(idSaltHash, "%{idp.scope}")); ]]> </Script> </AttributeDefinition>