Inhaltsverzeichnis

Attributfreigaben für Verlagsanbieter

(zurück zur Übersicht)

Viele kommerzielle Verlagsanbieter bieten inzwischen eine Anmeldung über SAML an, also über die DFN-AAI oder eduGAIN. Sie haben sich dazu auf einheitliche Attributanforderungen geeinigt, so dass Sie mit einer einzigen Konfiguration am IdP alle großen Verlagsanbieter auf einmal abdecken können. Die Voraussetzung dafür ist meist ein Lizenzvertrag zwischen Ihrer Hochschule bzw. Bibliothek und dem Anbieter.

Dennoch sollten Sie die Anbieter einzeln darüber zu informieren, dass Sie den SAML-basierten Zugriff nutzen wollen. Bei manchen kann man dies online aktivieren, bei anderen wenden Sie sich bitte an die Kontaktperson des Verlags.

Die Verlage erwarten im Normalfall eines von zwei Attributen:

Welche Gruppen bekommen Zugriff?

Ihr Lizenzvertrag oder ggf. das Landeshochschulgesetz Ihres Bundeslandes geben Auskunft darüber, welche Gruppen welche Berechtigungen bekommen.

Eine Orientierung für die Attributfreigaben bietet auch die Gruppe FIM4L (Federated Identity Management For Libraries) https://www.fim4l.org/ mit ihren Principles and Recommendation.

Beispiel

Wir zeigen im Folgenden eine Beispielkonfiguration, die im IdM vorhandene Gruppen nutzt, um diese beiden Attribute IdP-seitig zu befüllen und freizugeben. Im Beispiel gibt es folgende Gruppen:

Gruppe memberOf
Angestellte cn=angestellte,ou=users,dc=beispiel-uni,dc=de
Studierende A cn=studiengang A,ou=users,dc=beispiel-uni,dc=de
Studierende B cn=studiengang B,ou=users,dc=beispiel-uni,dc=de
Professor*innen cn=profs,ou=users,dc=beispiel-uni,dc=de
Gäste cn=gaeste,ou=users,dc=beispiel-uni,dc=de

Es soll erreicht werden, dass die ersten vier Gruppen als Angehörige der Einrichtung die Verlagsressourcen nutzen dürfen, Gäste dagegen nicht.

Attributdefinition im upgegradeten IdP 4.x

In aktualisierten IdP 4.x mit der alten Syntax/ohne die Attribute Registry machen Sie es so:

./conf/attribute-resolver.xml
 <!-- eduPersonAffiliaton aus dem 'memberof' herausholen -->
 
 <AttributeDefinition xsi:type="Mapped" id="eduPersonAffiliation">
  <InputDataConnector ref="myLDAP" attributeNames="memberOf"/>
   <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="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örige" 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}">
   <InputAttributeDefinition 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="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">
   <InputAttributeDefinition 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="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>

Attributdefinition im IdP 4.x

In Neuinstallationen des IdP 4.x ist die Datei übersichtlicher gestaltet:

./conf/attribute-resolver.xml
 <!-- eduPersonAffiliaton aus dem 'memberof' herausholen -->
 
 <AttributeDefinition xsi:type="Mapped" id="eduPersonAffiliation">
  <InputDataConnector ref="myLDAP" attributeNames="memberOf"/>
 
   <!-- 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örige" 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}">
   <InputAttributeDefinition ref="eduPersonAffiliation"/>
 </AttributeDefinition>
 
 <!-- eduPersonEntitlement je nach eduPersonAffiliation setzen -->
 <AttributeDefinition xsi:type="ScriptedAttribute" id="eduPersonEntitlement">
   <InputAttributeDefinition ref="eduPersonAffiliation" />
   <Script>
          <![CDATA[
              if (eduPersonAffiliation.getValues().contains("member")) {
                      eduPersonEntitlement.getValues().add("urn:mace:dir:entitlement:common-lib-terms");
              }
           ]]>
   </Script>
 </AttributeDefinition>

Attributfreigabe

./conf/attribute-filter.xml
    <!-- Anonyme Angaben an alle SPs freigeben werden -->
    <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>