Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Warning

Wer IDPv4 mit Attribute Registry betreibt und zusätzlich die Regeln vom Beginn unserer Attribute Resolver-Dokumentation für SCHAC-Attribute ergänzt hat, sollte alle DisplayName- und vor allem AttributeEncoder-Elemente aus den untenstehenden AttributeDefinitions entfernen.

Erzeugen

Nachdem dieses Attribut nicht in genau in Form des ESI bereits irgendwo gespeichert sein wird, folgt ein Beispiel, wie dynamisch aus dem Attribut uid (das aus dem DataConnector mit der id="myLDAP" kommt) die Matrikelnummer extrahiert und in die benötigte Form gebracht werden kann. In diesem (fiktiven) Beispiel enthält uid eine lokale UserID, die für Studierende dem Werteschema "x<MATRIKELNR>" folgt. Hat die UserID nicht die erwartete Form, bleibt das Attribut leer (und wird vom IDP später entfernt):

Code Block
languagehtml/xml
<AttributeDefinition id="schacPersonalUniqueCode" xsi:type="Mapped">
    <InputDataConnector ref="myLDAP" attributeNames="uid" />
    <DisplayName xml:lang="de">Europäische Studierendenkennung (ESI)</DisplayName>
    <DisplayName xml:lang="en">European Student Identifier (ESI)</DisplayName>
    <ValueMap>
        <ReturnValue>urn:schac:personalUniqueCode:int:esi:at:$1</ReturnValue>
        <SourceValue>^x([0-9]{8,})$</SourceValue>
    </ValueMap>
    <AttributeEncoder xsi:type="SAML2String" name="urn:oid:1.3.6.1.4.1.25178.1.2.14" friendlyName="schacPersonalUniqueCode" encodeType="false" />
</AttributeDefinition>
Info
iconfalse

Statt uid kann hier also jedes existierende Attribut eingesetzt werden, das bereits eine konsistente Form der Matrikelnummer enthält (etwa E-Mail-Adresse, sAMAccountName oder eduPersonPrincipalName) um daraus die Matrikelnummer zu extrahieren und zu einem ESI zu formen.

Wird keine Umformung des Quelldatums benötigt (fiktives Attribut matrikelnummer liefert bereits genau diese), reicht auch eine Template-Definition:

Code Block
languagehtml/xml
<AttributeDefinition id="schacPersonalUniqueCode" xsi:type="Template">
    <InputDataConnector ref="myLDAP" attributeNames="matrikelnummer" />
    <DisplayName xml:lang="de">Europäische Studierendenkennung (ESI)</DisplayName>
    <DisplayName xml:lang="en">European Student Identifier (ESI)</DisplayName>
    <Template>urn:schac:personalUniqueCode:int:esi:at:${matrikelnummer}</Template>
    <AttributeEncoder xsi:type="SAML2String" name="urn:oid:1.3.6.1.4.1.25178.1.2.14" friendlyName="schacPersonalUniqueCode" encodeType="false" />
</AttributeDefinition>

Keine Matrikelnummer

Institutionen, die keine Matrikelnummern ausgeben, erzeugen den European Student Identifier übrigens weitgehend analog, nur eben aus einer lediglich lokal eindeutigen Kennung (im Beispiel unten wieder aus dem uid-Attribut) sowie der kanonischen DNS-Domain ("scope") der Institution:

Code Block
languagehtml/xml
<AttributeDefinition id="schacPersonalUniqueCode" xsi:type="Template">
    <InputDataConnector ref="myLDAP" attributeNames="uid" />
    <DisplayName xml:lang="de">Europäische Studierendenkennung (ESI)</DisplayName>
    <DisplayName xml:lang="en">European Student Identifier (ESI)</DisplayName>
    <Template>urn:schac:personalUniqueCode:int:esi:%{idp.scope}:${uid}</Template>
    <AttributeEncoder xsi:type="SAML2String" name="urn:oid:1.3.6.1.4.1.25178.1.2.14" friendlyName="schacPersonalUniqueCode" encodeType="false" />
</AttributeDefinition>

Das dynamische Erzeugen des ESI aus einem Attribut, das eine Form der Matrikelnummer enthält, zeigen wir in unserer Attribute Resolver-Dokumentation.

Freigeben

Eine passende Policy für den attribute-filter.xml, dieses die Matrikelnummer als ESI-Attribut (d.h. nur die ESI-spezifischen Werte des schacPersonalUniqueCodedes schacPersonalUniqueCode-Attributs) nur an aufgezählte Service Provider weiterzugeben (etwa an den Erasmus+ Proxy und hier an das "MyAcademicID IAM Service" sowie das österreichische iXam-Prüfungssystem), und nur dann, wenn das Attribut eduPersonAffiliation den Wert student hat (also nur für Studierende), könnte beim Shibboleth IDP dann so aussehen:

Code Block
languagehtml/xml
<AttributeFilterPolicy id="Matrikelnummer-als-ESI">
    <PolicyRequirementRule xsi:type="AND">
        <Rule xsi:type="OR">
            <Rule xsi:type="Requester" value="https://proxy.prod.erasmus.eduteams.org/metadata/backend.xml" />
            <Rule xsi:type="Requester" value="https://ixam.cloud/saml2" />
        </Rule>
        <Rule xsi:type="Value" attributeID="eduPersonScopedAffiliation" value="student" />
    </PolicyRequirementRule>
    <AttributeRule attributeID="schacPersonalUniqueCode">
        <PermitValueRule xsi:type="ValueRegex" regex="^urn:schac:personalUniqueCode:int:esi:.*$" />
    </AttributeRule>
</AttributeFilterPolicy>


Note

Die "Erasmus+ "- Services benötigen mehr weitere Attribute/Daten und nicht nur die Matrikelnummer als nur den ESI, der oben gezeigt wird!
Es ist also sicherzustellen, daß alle nötigen Attribute verfügbar sind und auch an den ""Erasmus+"-Services-Proxy freigegeben werden.