Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:shibidp3attributes-aaiplus [2021/02/23 15:55] Silke Meyerde:shibidp:config-attributes-aaiplus [2022/05/02 14:32] (aktuell) Wolfgang Pempe
Zeile 2: Zeile 2:
  
 <callout type="danger" title="Work in Progress"> <callout type="danger" title="Work in Progress">
-Diese Seite ist noch im Aufbau begriffen!+Diese Seite ist noch im Aufbau begriffen! \\ 
 +Das Konzept AAIplus sieht u.a. vor, die Entity Category ''http://aai.dfn.de/category/aai-plus'' an Service Provider zu vergeben, die ein Datenschutz-Audit absolvieren und im Gegenzug die Zusicherung erhalten, dass die vom jeweiligen SP benötigten Attribute von den teilnehmenden IdPs ohne weitere Rückfragen übertragen werden. Siehe hierzu einstweilen den Beitrag zum Thema in den [[https://www2.dfn.de/fileadmin/5Presse/DFNMitteilungen/DFN_Mitteilungen_96.pdf|DFN-Mitteilungen Nr. 96]] (ab Seite 13). \\ 
 +Die o.g. Entity Category wird derzeit noch nicht vergeben (Stand März 2021). Es sind noch verfahrenstechnische Fragen zu klären.
 </callout> </callout>
  
Zeile 9: Zeile 11:
 ===== Attribute Resolver ===== ===== Attribute Resolver =====
  
-Beispiele für die Definition von ''eduPersonEntitlement'' und ''eduPerson(Scoped)Affiliation'' finden sich unter [[de:shibidp:config-attributes-publishers|Attribut-Configuration für Verlagsanbieter]], zu ''schacUserStatus'' siehe unter [[de:shibidp3userdepro#verlaesslichkeit_von_queries|User Deprovisionierung]]+Beispiele für die Definition von ''eduPersonEntitlement'' und ''eduPerson(Scoped)Affiliation'' finden sich unter [[de:shibidp:config-attributes-publishers|Attribut-Configuration für Verlagsanbieter]], zu ''schacUserStatus'' siehe unter [[de:shibidp:config-deprovisionierung#verlaesslichkeit_von_queries|User Deprovisionierung]], zu ''eduPersonAssurance'' siehe [[de:aai:assurance_idp|REFEDS Assurance Framework Identity Provider]].
- +
- +
- +
-\\ +
- +
-FIXME Beispiel für Shib IdP 4Deployment-Empfehlungen bzgl. [[https://issues.shibboleth.net/jira/browse/IDP-1674|pairwise-id]] für Neuinstallationen  +
- +
-\\ +
- +
-==== IdP 4.x ====+
  
 <file xml /opt/shibboleth-idp/conf/attribute-resolver.xml> <file xml /opt/shibboleth-idp/conf/attribute-resolver.xml>
Zeile 98: Zeile 90:
         salt="%{idp.persistentId.salt}">         salt="%{idp.persistentId.salt}">
         <InputAttributeDefinition ref="%{idp.persistentId.sourceAttribute}" />         <InputAttributeDefinition ref="%{idp.persistentId.sourceAttribute}" />
-        <BeanManagedConnection>MyPidDataSource</BeanManagedConnection>+        <BeanManagedConnection>shibboleth.MySQLDataSource</BeanManagedConnection>
     </DataConnector>     </DataConnector>
  
Zeile 127: Zeile 119:
 </file> </file>
  
-==== IdP 3.x ====+<callout type="danger" title="Obacht bei Hashfunktion"> 
 +Existiert bereits eine AttributeDefinition für **eduPersonUniqueId**, sollte die hierfür verwendete Hashfunktion nachgenutzt werden, da andernfalls Identitätsverlust bei Service Providern droht, die dieses Attribut zur Personalisierung nutzen!  
 + 
 +In diesem Fall können Scope und Wert direkt nach **samlSubjectID** übernommen werden:
 <file xml /opt/shibboleth-idp/conf/attribute-resolver.xml> <file xml /opt/shibboleth-idp/conf/attribute-resolver.xml>
- +    <AttributeDefinition id="samlSubjectID" xsi:type="Prescoped"> 
-    <AttributeDefinition id="uid" xsi:type="PrincipalName"> +        <InputAttributeDefinition ref="eduPersonUniqueId" />
-        <DisplayName xml:lang="en">User Name</DisplayName> +
-        <DisplayName xml:lang="de">Nutzerkennung</DisplayName> +
-        <DisplayDescription xml:lang="en">Local User Id</DisplayDescription> +
-        <DisplayDescription xml:lang="de">Nutzerkennung der Heimateinrichtung</DisplayDescription> +
-        <AttributeEncoder xsi:type="SAML2String" name="urn:oid:0.9.2342.19200300.100.1.1" friendlyName="uid" />+
     </AttributeDefinition>     </AttributeDefinition>
 +</file>
 +</callout>
 +===== Attribute Filter =====
 +Damit Endnutzer*innen in die Lage versetzt werden können, über das User Consent Modul die Übertragung optionaler Attribute an- oder abzuwählen, muss ''onlyIfRequired="false"'' gesetzt werden.
  
-    <!-- dies hier ist nur eine Auswahl! Bei Bedarf weitere Attribut-Definitionen einfügen -->+Da der Bedarf bzgl. SAML V2.0 Subject Identifier Attribut seitens Relying Parties (SPs) über ein [[de:entity_attributes#spbenoetigte_subject_identifier_attribute|Entity Attribut]] signalisiert wird, erfolgt die Attributfreigabe über separate Attribute Filter Policies.
  
-    <AttributeDefinition id="mail" xsi:type="Simple"> +<file xml /opt/shibboleth-idp/conf/attribute-filter.xml> 
-        <InputDataConnector ref="myLDAP" attributeNames="mail"/+       
-        <DisplayName xml:lang="en">E-mail</DisplayName> +     <!-- Anonyme Angaben an alle SPs freigeben werden --> 
-        <DisplayName xml:lang="de">E-Mail</DisplayName+      
-        <DisplayDescription xml:lang="en">E-Mail address</DisplayDescription+     <AttributeFilterPolicy id="ReleaseToAnyone"> 
-        <DisplayDescription xml:lang="de">E-Mail Adresse</DisplayDescription+        <PolicyRequirementRule xsi:type="ANY" />
-        <AttributeEncoder xsi:type="SAML2Stringname="urn:oid:0.9.2342.19200300.100.1.3" friendlyName="mail" encodeType="false"/> +
-    </AttributeDefinition>+
  
-    <AttributeDefinition xsi:type="Templateid="displayName"+        <AttributeRule attributeID="eduPersonAssurancepermitAny="true" />
-        <InputDataConnector ref="myLDAP" attributeNames="givenName sn"/> +
-        <DisplayName xml:lang="en">Display name</DisplayName> +
-        <DisplayName xml:lang="de">Angezeigter Name</DisplayName> +
-        <DisplayDescription xml:lang="en">Display name of a person</DisplayDescription> +
-        <DisplayDescription xml:lang="de">Angezeigter Name des Nutzers bzw. der Nutzerin</DisplayDescription> +
-        <Template>${givenName} ${sn}</Template>  +
-        <AttributeEncoder xsi:type="SAML2String" name="urn:oid:2.16.840.1.113730.3.1.241" friendlyName="displayName" encodeType="false" /> +
-    </AttributeDefinition>+
  
-    <AttributeDefinition id="schacHomeOrganization" xsi:type="Simple"> +        <AttributeRule attributeID="eduPersonEntitlement"> 
-        <InputDataConnector ref="staticAttributes" attributeNames="schacHomeOrganization" /> +          <PermitValueRule xsi:type="Valuevalue="urn:mace:dir:entitlement:common-lib-terms"/> 
-        <DisplayName xml:lang="en">Home organization (Schac)</DisplayName> +        </AttributeRule>
-        <DisplayName xml:lang="de">Heimateinrichtung (Schac)</DisplayName> +
-        <DisplayDescription xml:lang="en">Home organization (Schac)</DisplayDescription> +
-        <DisplayDescription xml:lang="de">Heimateinrichtung (Schac)</DisplayDescription> +
-        <AttributeEncoder xsi:type="SAML2Stringname="urn:oid:1.3.6.1.4.1.25178.1.2.9" friendlyName="schacHomeOrganization" encodeType="false" /> +
-    </AttributeDefinition> +
-     +
-    <AttributeDefinition xsi:type="Simple" id="o"> +
-        <InputDataConnector ref="staticAttributes" attributeNames="o"/> +
-        <DisplayName xml:lang="en">Home organization</DisplayName+
-        <DisplayName xml:lang="de">Heimateinrichtung</DisplayName> +
-        <DisplayDescription xml:lang="en">Home organization</DisplayDescription> +
-        <DisplayDescription xml:lang="de">Heimateinrichtung</DisplayDescription> +
-        <AttributeEncoder xsi:type="SAML2String" name="urn:oid:2.5.4.10" friendlyName="o" encodeType="false" /> +
-    </AttributeDefinition>+
  
-    <!-- Identifier Attributes -->+        <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>
  
-    <AttributeDefinition id="subjectHash" xsi:type="ScriptedAttribute" dependencyOnly="true"> 
-        <InputDataConnector ref="myLDAP" attributeNames="%{idp.persistentId.sourceAttribute}" /> 
-        <Script><![CDATA[ 
-          var digestUtils = Java.type("org.apache.commons.codec.digest.DigestUtils"); 
-          var saltedHash  = digestUtils.sha256Hex(%{idp.persistentId.sourceAttribute}.getValues().get(0) + "%{idp.persistentId.salt}"); 
-          subjectHash.addValue(saltedHash); 
-        ]]></Script> 
-    </AttributeDefinition> 
  
-    <AttributeDefinition xsi:type="Scoped" id="samlSubjectID" scope="%{idp.scope}"> +     <AttributeFilterPolicy id="releaseToAAIplus">
-        <InputAttributeDefinition ref="subjectHash" /> +
-        <DisplayName xml:lang="en">Unique Subject ID</DisplayName> +
-        <DisplayName xml:lang="de">Eindeutige Subject ID</DisplayName> +
-        <DisplayDescription xml:lang="en">Unique ID: A unique identifier for a person, mainly for inter-institutional user identification</DisplayDescription> +
-        <DisplayDescription xml:lang="de">Eindeutige Nutzerkennung</DisplayDescription> +
-        <AttributeEncoder xsi:type="SAML2ScopedString" name="urn:oasis:names:tc:SAML:attribute:subject-id" friendlyName="subject-id" encodeType="false" /> +
-    </AttributeDefinition> +
- +
-    <AttributeDefinition xsi:type="Scoped" id="samlPairwiseID" scope="%{idp.scope}"> +
-        <InputDataConnector ref="myStoredId" attributeNames="persistentId"/> +
-        <DisplayName xml:lang="en">Pairwise ID (pseudonyme Kennung)</DisplayName> +
-        <DisplayName xml:lang="de">Pairwise ID (pseudonymous ID)</DisplayName> +
-        <DisplayDescription xml:lang="en">Targeted ID: A unique, opaque identifier for a person, different for each service provider.</DisplayDescription> +
-        <DisplayDescription xml:lang="de">Targeted ID: Eindeutige, opake Nutzerkennung, unterschiedlich pro Service Provider.</DisplayDescription> +
-        <AttributeEncoder xsi:type="SAML2ScopedString" name="urn:oasis:names:tc:SAML:attribute:pairwise-id" friendlyName="pairwise-id" encodeType="false" /> +
-    </AttributeDefinition> +
- +
-    <!-- Deprecated - nur für Kompatibilität mit rückschrittlichen SPs -->  +
- +
-    <!-- gleicher Wert wie für Subject Id --> +
-    <AttributeDefinition xsi:type="Scoped" id="eduPersonUniqueId" scope="%{idp.scope}"> +
-        <InputAttributeDefinition ref="subjectHash" /> +
-        <DisplayName xml:lang="en">Unique ID</DisplayName> +
-        <DisplayName xml:lang="de">Eindeutige ID</DisplayName> +
-        <DisplayDescription xml:lang="en">Unique ID: A unique identifier for a person, mainly for inter-institutional user identification</DisplayDescription> +
-        <DisplayDescription xml:lang="de">Eindeutige Nutzerkennung</DisplayDescription> +
-        <AttributeEncoder xsi:type="SAML2String" +
-                  name="urn:oid:1.3.6.1.4.1.5923.1.1.1.13" friendlyName="eduPersonUniqueId" /> +
-    </AttributeDefinition> +
- +
-    <!-- Targeted ID/Persistent ID --> +
-    <AttributeDefinition id="eduPersonTargetedID" xsi:type="SAML2NameID" nameIdFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"> +
-        <InputDataConnector ref="myStoredId" attributeNames="persistentId"/> +
-        <DisplayName xml:lang="en">Targeted ID (pseudonyme Kennung)</DisplayName> +
-        <DisplayName xml:lang="de">Targeted ID (pseudonymous ID)</DisplayName> +
-        <DisplayDescription xml:lang="en">Targeted ID: A unique, pseudonymous identifier for a person, different for each service provider.</DisplayDescription> +
-        <DisplayDescription xml:lang="de">Targeted ID: Eindeutige, pseudonyme Nutzerkennung, unterschiedlich pro Service Provider.</DisplayDescription> +
-        <AttributeEncoder xsi:type="SAML2XMLObject" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" friendlyName="eduPersonTargetedID" /> +
-    </AttributeDefinition> +
- +
- +
-    <!-- ========================================== --> +
-    <!--      Data Connectors                       --> +
-    <!-- ========================================== --> +
- +
-    <DataConnector id="staticAttributes" xsi:type="Static"> +
-        <Attribute id="schacHomeOrganization"> +
-            <Value>hochschule-example.de</Value> +
-        </Attribute> +
-        <Attribute id="schacHomeOrganizationType"> +
-            <Value>urn:schac:homeOrganizationType:eu:higherEducationalInstitution</Value> +
-        </Attribute> +
-        <Attribute id="o"> +
-            <Value>Test Organization</Value> +
-        </Attribute> +
-    </DataConnector> +
- +
-    <DataConnector id="myStoredId" +
-        xsi:type="StoredId" +
-        generatedAttributeID="persistentId" +
-        encoding="BASE32" +
-        salt="%{idp.persistentId.salt}"> +
-        <InputAttributeDefinition ref="%{idp.persistentId.sourceAttribute}" /> +
-        <BeanManagedConnection>MyPidDataSource</BeanManagedConnection> +
-    </DataConnector> +
- +
-    <DataConnector id="myLDAP" xsi:type="LDAPDirectory" +
-        ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}" +
-        baseDN="%{idp.attribute.resolver.LDAP.baseDN}"  +
-        principal="%{idp.attribute.resolver.LDAP.bindDN}" +
-        principalCredential="%{idp.attribute.resolver.LDAP.bindDNCredential}" +
-        useStartTLS="%{idp.attribute.resolver.LDAP.useStartTLS:true}" +
-        connectTimeout="%{idp.attribute.resolver.LDAP.connectTimeout}" +
-                trustFile="%{idp.attribute.resolver.LDAP.trustCertificates}" +
-        responseTimeout="%{idp.attribute.resolver.LDAP.responseTimeout}"> +
-        <FilterTemplate> +
-            <![CDATA[ +
-                %{idp.attribute.resolver.LDAP.searchFilter} +
-            ]]> +
-        </FilterTemplate> +
-            <ConnectionPool +
-            minPoolSize="%{idp.pool.LDAP.minSize:3}" +
-            maxPoolSize="%{idp.pool.LDAP.maxSize:10}" +
-            blockWaitTime="%{idp.pool.LDAP.blockWaitTime:PT3S}" +
-            validatePeriodically="%{idp.pool.LDAP.validatePeriodically:true}" +
-            validateTimerPeriod="%{idp.pool.LDAP.validatePeriod:PT5M}" +
-            expirationTime="%{idp.pool.LDAP.idleTime:PT10M}" +
-            failFastInitialize="%{idp.pool.LDAP.failFastInitialize:false}" /> +
-    </DataConnector> +
- +
-</file> +
- +
-===== Attribute Filter ===== +
-Damit Endnutzer*innen in die Lage versetzt werden können, über das User Consent Modul die Übertragung optionaler Attribute an- oder abzuwählen, muss ''onlyIfRequired="false"'' gesetzt werden. +
- +
-<file xml /opt/shibboleth-idp/conf/attribute-filter.xml> +
-    <AttributeFilterPolicy id="releaseToAAIplus">+
  
        <PolicyRequirementRule         <PolicyRequirementRule 
Zeile 291: Zeile 162:
                attributeName="http://macedir.org/entity-category"                attributeName="http://macedir.org/entity-category"
                attributeValue="http://aai.dfn.de/category/aai-plus" />                attributeValue="http://aai.dfn.de/category/aai-plus" />
- 
-       <AttributeRule attributeID="samlSubjectID"> 
-          <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="false"/> 
-       </AttributeRule> 
- 
-       <AttributeRule attributeID="samlPairwiseID"> 
-          <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="false"/> 
-       </AttributeRule> 
  
        <AttributeRule attributeID="displayName">        <AttributeRule attributeID="displayName">
Zeile 335: Zeile 198:
           <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="false"/>           <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="false"/>
        </AttributeRule>        </AttributeRule>
 +    
 +    </AttributeFilterPolicy>
 +
 +
 +    <AttributeFilterPolicy id="releaseSubjectIdToAAIplus">
 +
 +        <PolicyRequirementRule xsi:type="AND"> 
 +             <Rule xsi:type="EntityAttributeExactMatch"
 +                   attributeName="urn:oasis:names:tc:SAML:profiles:subject-id:req"
 +                   attributeValue="subject-id" />
 +             <Rule xsi:type="EntityAttributeExactMatch"
 +                   attributeName="http://macedir.org/entity-category"
 +                   attributeValue="http://aai.dfn.de/category/aai-plus" />
 +        </PolicyRequirementRule>
 +
 +        <AttributeRule attributeID="samlSubjectID" permitAny="true"/>
 +    </AttributeFilterPolicy>  
 +
 +
 +    <AttributeFilterPolicy id="releasePairwiseIdToAAIplus">
 +
 +        <PolicyRequirementRule xsi:type="AND"> 
 +             <Rule xsi:type="OR">
 +                <Rule xsi:type="EntityAttributeExactMatch"
 +                      attributeName="urn:oasis:names:tc:SAML:profiles:subject-id:req"
 +                      attributeValue="pairwise-id" />
 +                <Rule xsi:type="EntityAttributeExactMatch"
 +                      attributeName="urn:oasis:names:tc:SAML:profiles:subject-id:req"
 +                      attributeValue="any" />
 +             </Rule>
 +             <Rule xsi:type="EntityAttributeExactMatch"
 +                   attributeName="http://macedir.org/entity-category"
 +                   attributeValue="http://aai.dfn.de/category/aai-plus" />
 +        </PolicyRequirementRule>
  
-</AttributeFilterPolicy>+        <AttributeRule attributeID="samlPairwiseID" permitAny="true"/> 
 +    </AttributeFilterPolicy>  
  
 </file> </file>
Zeile 382: Zeile 280:
 </file> </file>
  
-{{tag>idp3 idp4}}+{{tag>idp4 subjectIdentifierAttributes aaiplus attributfreigabe pairwise-id subject-id}}
  • Zuletzt geändert: vor 3 Jahren