Dies ist eine alte Version des Dokuments!


Attribut-Configuration für (kommerzielle) Verlagsanbieter

Sofern Ihre Hochschule (oder meist die Bibliothek der Hochschule) Lizenzverträge mit kommerziellen Verlagsanbietern abgeschlossen hat ist es mittlerweile möglich statt der unkomfortablen IP-basierten Autorisierung auch einen Login per SAML/AAI zu nutzen, bei den Anbietern übrigends oft auch etwas missverständlich „Shibboleth“-Login genannt (das ist so als ob man statt von „Web-Seiten“ von „Apache-Seiten“ reden würde).

Glücklicherweise haben sich die Anbieter im Verlagsbereich schon seit geraumer Zeit auf einheitliche Attributanforderungen geeinigt, so dass Sie mit einer einzigen Konfiguration am IdP alle großen Verlagsanbieter auf einmal „erschlagen“.

Wichtig: trotzdem bleibt es Ihnen nicht erspart, alle Anbieter einzeln darüber zu informieren, dass Sie jetzt einen SAML-fähigen IdP betreiben und diesen gerne für den Zugriff nutzen wollen. Bei manchen Anbietern kann man dies online aktivieren, andere müssen auf anderen Wegen kontaktiert werden. Klären Sie das bitte mit der jeweiligen Kontaktperson des Verlages.

Die Verlage erwarten im Normalfall eines von zwei Attributen:

  • Zugehörigkeit des Users: eduPersonScopedAffiliation mit dem Wert „member@SCOPE“
  • Berechtigung des Users: eduPersonEntitlement mit dem Wert „urn:mace:dir:common-lib-terms“

Im ersten Moment erscheint es vielleicht naheliegend, das IdM-Scheme um das eduPerson-Schema zu erweitern, um dann jedem vorhandenen User die entsprechende Zugehörigkeit und Berechtigung im IdM zu geben.

Da die Usergruppen im IdM-System in den allermeisten Fällen schon unterscheidbar angelegt sind (z.B. Studenten, Angestellte, Professoren, Gäste in einzelnen Teilbäumen oder zumindest in eigenen „memberOfs“) ist es viel eleganter diese schon vorhandene Gruppeninformatition zu nutzen, um im idP „on-the-fly“ die nötigen Werte für eduPersonScopedAffiliation und eduPersonEntitliment zu erzeugen. Der große Vorteil dieser Methode ist, dass Ihr IdM-System nicht erweitert werden muss und z.B. Eingabemasken für IdM-Sachbearbeiter nicht modifiziert werden müssen.

Wir gehen von einem Beispiel-IdM aus, in dem es folgende Gruppen gibt:

Gruppe memberOf
Angestellte cn=angestellte,ou=users,dc=beispiel-uni,dc=de
Studenten A cn=studiengang A,ou=users,dc=beispiel-uni,dc=de
Studenten B cn=studiengang B,ou=users,dc=beispiel-uni,dc=de
Professoren cn=professoren,ou=users,dc=beispiel-uni,dc=de
Gäste cn=gaeste,ou=users,dc=beispiel-uni,dc=de

Beispielhaft solle die ersten drei Gruppen im Sinne des Landshochschulgesetzes als „Angehörige“ (=„member“) der Einrichtung anzusehen sein, die Gruppe „Gäste“ dagegen nicht und ist somit nicht nutzungsberechtigt. Bitte konsultieren Sie für Ihren konkreten Fall den Lizenzvertrag mit dem Anbieter und ggfs. das LHG Ihres Bundeslandes um festzustellen welche Gruppen welche Berechtigungen bekommen sollen!

./conf/attribute-resolver.xml
 <!-- eduPersonAffiliaton aus dem 'memberof' herausholen -->
 
 <AttributeDefinition xsi:type="Mapped" id="eduPersonAffiliation" sourceAttributeID="memberOf">
  <Dependency ref="myLDAP" />
   <DisplayName xml:lang="en">Affiliation type</DisplayName>
   <DisplayName xml:lang="de">Zugehörigkeit</DisplayName>
   <DisplayDescription xml:lang="en">Type of affiliation with Home Organization</DisplayDescription>
   <DisplayDescription xml:lang="de">Art der Zugehörigkeit zur Heimateinrichtung</DisplayDescription>
  <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:eduPersonAffiliation" />
  <AttributeEncoder xsi:type="SAML2String" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.1" friendlyName="eduPersonAffiliation" />
 
   <!-- default 'affiliate', damit immer mindestens ein Wert vorhanden ist -->
   <DefaultValue>affiliate</DefaultValue>
 
   <!-- Mapping der Gruppen aus dem IdM jede Gruppe bekommt eine eigene eduPersonAffiliation
   und zusätzlich "member" sofern "Angehörig" im Sinne LHG -->
 
   <ValueMap>
     <ReturnValue>student</ReturnValue>
     <SourceValue ignoreCase="true">cn=studiengang.+</SourceValue>
   </ValueMap>
   <ValueMap>
     <ReturnValue>staff</ReturnValue>
     <SourceValue ignoreCase="true">cn=angestellte,.+</SourceValue>
     <SourceValue ignoreCase="true">cn=professoren,.+</SourceValue>
   </ValueMap>
 
   <ValueMap>
     <ReturnValue>member</ReturnValue>
     <SourceValue ignoreCase="true">cn=studiengang.+</SourceValue>
     <SourceValue ignoreCase="true">cn=angestellte,.+</SourceValue>
     <SourceValue ignoreCase="true">cn=professoren,.+</SourceValue>
   </ValueMap>
 
 </AttributeDefinition>
 
 <!-- eduPersonScopedAffiliation aus eduPersonAffiliation bilden -->
 <AttributeDefinition xsi:type="Scoped" id="eduPersonScopedAffiliation" scope="%{idp.scope}" sourceAttributeID="eduPersonAffiliation">
   <Dependency ref="eduPersonAffiliation" />
   <DisplayName xml:lang="en">Affiliation type (with institution)</DisplayName>
   <DisplayName xml:lang="de">Zugehörigkeit (+ Einrichtung)</DisplayName>
   <DisplayDescription xml:lang="en">Type of affiliation with Home Organization with scope</DisplayDescription>
   <DisplayDescription xml:lang="de">Art der Zugehörigkeit zur Heimateinrichtung mit Geltungsbereich</DisplayDescription>
   <AttributeEncoder xsi:type="SAML1ScopedString" name="urn:mace:dir:attribute-def:eduPersonScopedAffiliation" encodeType="false" />
   <AttributeEncoder xsi:type="SAML2ScopedString" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.9" friendlyName="eduPersonScopedAffiliation" encodeType="false" />
 </AttributeDefinition>
 
 <!-- eduPersonEntitlement je nach eduPersonAffiliation setzen -->
 <AttributeDefinition xsi:type="ScriptedAttribute" id="eduPersonEntitlement">
   <Dependency ref="eduPersonAffiliation" />
   <DisplayName xml:lang="en">Entitlement</DisplayName>
   <DisplayName xml:lang="de">Berechtigung</DisplayName>
   <DisplayDescription xml:lang="en">URI that indicates a set of rights to specific resources</DisplayDescription>
   <DisplayDescription xml:lang="de">Zeichenkette, die Rechte für spezifische Ressourcen beschreibt</DisplayDescription>
   <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:eduPersonEntitlement" />
   <AttributeEncoder xsi:type="SAML2String" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.7" friendlyName="eduPersonEntitlement" />
   <Script>
          <![CDATA[
              if (eduPersonAffiliation.getValues().contains("member")) {
                      eduPersonEntitlement.getValues().add("urn:mace:dir:entitlement:common-lib-terms");
              }
           ]]>
   </Script>
 </AttributeDefinition>
./conf/attribute-filter.xml
    <!-- Anonyme Angaben können an alle SP freigegeben werden,
        damit sind fast alle Verlags-SPs in der Föderation schon zufrieden -->
    <AttributeFilterPolicy id="LibraryTermsToAnyone">
        <PolicyRequirementRule xsi:type="ANY" />
 
      <AttributeRule attributeID="eduPersonEntitlement">
        <PermitValueRule xsi:type="Value" value="urn:mace:dir:entitlement:common-lib-terms"/>
      </AttributeRule>
 
      <AttributeRule attributeID="eduPersonScopedAffiliation">
        <PermitValueRule xsi:type="OR">
            <Rule xsi:type="Value" value="member"          ignoreCase="true" />
            <Rule xsi:type="Value" value="library-walk-in" ignoreCase="true" />
        </PermitValueRule>
      </AttributeRule>
 
    </AttributeFilterPolicy>
  • Zuletzt geändert: vor 6 Monaten