Sie befinden sich im Service: Identity Management

Attribute anfordern und transformieren

Attribute anfordern und transformieren

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. 

  1. Mit dem Service Provider einer Entity Category beitreten
  2. Attribute über Metadaten des Service Provides anfordern
  3. pairwise-id anfordern
  4. 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":

<AttributeResolver type="Transform" source="persistent-id>

    <Regex match="^https://login.rz.rwth-aachen.de/shibboleth\!https://mein.sp/shibboleth\!(.+)$" dest="uniqueID">$1</Regex>

</AttributeResolver>

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.

zuletzt geändert am 05.01.2024

Wie hat Ihnen dieser Inhalt geholfen?

Creative Commons Lizenzvertrag
Dieses Werk ist lizenziert unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz