Auf dieser Seite finden Sie Informationen dazu, wie Sie Attribute anfordern und mit Ihrem Shibboleth Service Provider Modul für die zu schützenden Anwendungen anpassen können.
- Mit dem Service Provider einer Entity Category beitreten
- Attribute über Metadaten des Service Provides anfordern
- pairwise-id anfordern
- Attribute transformieren
Mit dem Service Provider einer Entity Category beitreten
Damit ein lokaler Service Provider von den standardmäßig freigegebenen Attributen aus IDM.nrw konsumieren kann, muss er der Entity Category https://sso.rwth-aachen.de/category/rwth angehören.
Dazu muss in den Metadaten des Service Providers im Bereich der <Extensions> folgendes Eingetragen sein:
<md:Extensions xmlns:alg="urn:oasis:names:tc:SAML:metadata:algsupport">
<!-- ... -->
<mdattr:EntityAttributes>
<saml:Attribute Name="http://macedir.org/entity-category" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<saml:AttributeValue>https://sso.rwth-aachen.de/category/rwth</saml:AttributeValue>
</saml:Attribute>
</mdattr:EntityAttributes>
</md:Extensions>
|
Attribute über Metadaten des Service Provides anfordern
Wenn der Service Provider nun eines der von IDM.nrw zur allgemeinen Freigabe empfohlenen Attribute nutzen will, so muss seine Konfiguration im <SPSSODescriptor></<SPSSODescriptor>
folgendes umfassen:
< md:AttributeConsumingService index = "1" xmlns:md = "urn:oasis:names:tc:SAML:2.0:metadata" xmlns:saml = "urn:oasis:names:tc:SAML:2.0:assertion" > < md:ServiceName xml:lang = "en" >SP Name</ md:ServiceName > < md:ServiceName xml:lang = "de" >SP Name</ md:ServiceName > < md:ServiceDescription xml:lang = "en" >SP Description</ md:ServiceDescription > < md:ServiceDescription xml:lang = "de" >SP Beschreibung</ md:ServiceDescription > < md:RequestedAttribute FriendlyName = "eduPersonEntitlement" Name = "urn:oid:1.3.6.1.4.1.25178.1.2.10" NameFormat = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired = "true" /> < md:RequestedAttribute FriendlyName = "sn" Name = "urn:oid:1.3.6.1.4.1.25178.1.2.10" NameFormat = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired = "true" /> < md:RequestedAttribute FriendlyName = "givenName" Name = "urn:oid:1.3.6.1.4.1.25178.1.2.10" NameFormat = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired = "true" /> < md:RequestedAttribute FriendlyName = "idmNrwDocumentSurname" Name = "urn:oid:1.3.6.1.4.1.22177.400.1.2.1.2" NameFormat = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired = "true" /> < md:RequestedAttribute FriendlyName = "idmNrwDocumentGivenName" Name = "urn:oid:1.3.6.1.4.1.22177.400.1.2.1.1" NameFormat = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired = "true" /> < md:RequestedAttribute FriendlyName = "eduPersonScopedAffiliation" Name = "urn:oid:1.3.6.1.4.1.5923.1.1.1.9" NameFormat = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired = "true" /> < md:RequestedAttribute FriendlyName = "mail" Name = "urn:oid:0.9.2342.19200300.100.1.3" NameFormat = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired = "true" /> < md:RequestedAttribute FriendlyName = "schacHomeOrganizationType" Name = "urn:oid:1.3.6.1.4.1.25178.1.2.10" NameFormat = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired = "true" /> </ md:AttributeConsumingService >
|
pairwise-id anfordern
Wenn der Service Provider die pairwise-id benötigt, muss die Metadata Extensions angepasst werden:
<Extensions> <mdattr:EntityAttributes> <saml:Attribute Name= "urn:oasis:names:tc:SAML:profiles:subject-id:req" NameFormat= "urn:oasis:names:tc:SAML:2.0:attrname-format:uri" > <saml:AttributeValue>pairwise-id</saml:AttributeValue> </saml:Attribute> </mdattr:EntityAttributes> </Extensions>
|
Attribute transformieren
Möchte man auf der Service-Provider-Seite ein Attribut den eigenen Bedürfnissen anpassen, so kann man das durch den "TransformAttributeResolver" machen.
Das "Transform" verwendet die Shared Library plugins.so. Daher muss in der /etc/shibboleth/shibboleth2.xml ein weiterer Eintrag hinzugefügt werden:
<OutOfProcess logger="shibd.logger"> <Extensions> <Library path="plugins.so"/> </Extensions> </OutOfProcess>
|
Beispiel: DisplayName in Vorname und Nachname splitten
Dazu wird in der Datei /etc/shibboleth/shibboleth2.xml ein entsprechender Resolver konfiguriert:
<AttributeResolver type="Transform" source="displayName"> <Regex match="^(.+) (.+)$" dest="givenName">$1</Regex> <Regex match="^(.+) (.+)$" dest="sn">$2</Regex> <Regex match="^(.+) (.+)$">$2, $1</Regex> </AttributeResolver>
|
Hier wird zum einen das Attribute "displayName" in zwei zusätzliche Attribute, namentlich "givenName" und "sn", aufgesplittet und zum anderen beim Displayname das Format "Nachname, Vorname" erzwungen. Dazu wird zunächst ein Regex definiert (hier: zwei RegEx Gruppen) und die Matches entsprechend extrahiert.
Beispiel: eduPersonTargetedID extrahieren
Ein anderes Beispiel ist das Attribut "eduPersonTargetedID":
ODER
<AttributeResolver type="Transform" source="persistent-id"> <Regex match="^(.+)!(.+)!(.+)$" dest="uniqueID">$3</Regex> </AttributeResolver>
|
Bei beiden Beispielen wird der 64 Zeichen String aus der eduPersonTargetedID extrahiert, um diese dann in das Feld "uniqueID" zu schreiben.
Bei dem unteren Beispiel wäre
- $1 der IdP, der die eduPersonTargetedID herausgibt
- $2 der SP, der die eduPersonTargetedID konsumiert
- $3 die 64 Zeichen lange, pro SP eindeutige, ID
Beispiel: Entfernen eines Teilstrings (hier orgID aus den eduPersonEntitlements wie z. B. dem Rollenstring)
Möchte man einen Teil des gelieferten Strings entfernen, weil die Anwendung damit nicht umgehen kann, so kann man das Attribut wie folgt transformieren:
<AttributeResolver type="Transform" source="eduPersonEntitlement"> <Regex match="^(.+):(orgid=.+)$" dest="entitlement">$1</Regex> </AttributeResolver>
|
Hiermit wird in $1 das alte Entitlement in "entitlement" gespeichert. In $2 wäre die orgID verfügbar.

Lesen Sie hierzu: