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
Nächste ÜberarbeitungBeide Seiten der Revision
de:shibidp3attributes-aaiplus [2020/09/09 07:51] Wolfgang Pempede:shibidp:config-attributes-aaiplus [2021/08/20 17:56] 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://www.dfn.de/fileadmin/5Presse/DFNMitteilungen/DFN_Mitteilungen_96_download.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]].
-\\ +
- +
-FIXME Beispiel für Shib IdP 4, Deployment-Empfehlungen bzgl. [[https://issues.shibboleth.net/jira/browse/IDP-1674|pairwise-id]] für Neuinstallationen +
  
 <file xml /opt/shibboleth-idp/conf/attribute-resolver.xml> <file xml /opt/shibboleth-idp/conf/attribute-resolver.xml>
  
-    <AttributeDefinition id="uid" xsi:type="PrincipalName"+    <AttributeDefinition id="uid" xsi:type="PrincipalName" />
-        <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>+
  
     <!-- dies hier ist nur eine Auswahl! Bei Bedarf weitere Attribut-Definitionen einfügen -->     <!-- dies hier ist nur eine Auswahl! Bei Bedarf weitere Attribut-Definitionen einfügen -->
Zeile 28: Zeile 21:
     <AttributeDefinition id="mail" xsi:type="Simple">     <AttributeDefinition id="mail" xsi:type="Simple">
         <InputDataConnector ref="myLDAP" attributeNames="mail"/>         <InputDataConnector ref="myLDAP" attributeNames="mail"/>
-        <DisplayName xml:lang="en">E-mail</DisplayName> 
-        <DisplayName xml:lang="de">E-Mail</DisplayName> 
-        <DisplayDescription xml:lang="en">E-Mail address</DisplayDescription> 
-        <DisplayDescription xml:lang="de">E-Mail Adresse</DisplayDescription> 
-        <AttributeEncoder xsi:type="SAML2String" name="urn:oid:0.9.2342.19200300.100.1.3" friendlyName="mail" encodeType="false"/> 
     </AttributeDefinition>     </AttributeDefinition>
  
     <AttributeDefinition xsi:type="Template" id="displayName">     <AttributeDefinition xsi:type="Template" id="displayName">
         <InputDataConnector ref="myLDAP" attributeNames="givenName sn"/>         <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>          <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>
  
     <AttributeDefinition id="schacHomeOrganization" xsi:type="Simple">     <AttributeDefinition id="schacHomeOrganization" xsi:type="Simple">
         <InputDataConnector ref="staticAttributes" attributeNames="schacHomeOrganization" />         <InputDataConnector ref="staticAttributes" attributeNames="schacHomeOrganization" />
-        <DisplayName xml:lang="en">Home organization (Schac)</DisplayName> 
-        <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="SAML2String" name="urn:oid:1.3.6.1.4.1.25178.1.2.9" friendlyName="schacHomeOrganization" encodeType="false" /> 
     </AttributeDefinition>     </AttributeDefinition>
          
     <AttributeDefinition xsi:type="Simple" id="o">     <AttributeDefinition xsi:type="Simple" id="o">
         <InputDataConnector ref="staticAttributes" attributeNames="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>     </AttributeDefinition>
  
Zeile 76: Zeile 49:
     <AttributeDefinition xsi:type="Scoped" id="samlSubjectID" scope="%{idp.scope}">     <AttributeDefinition xsi:type="Scoped" id="samlSubjectID" scope="%{idp.scope}">
         <InputAttributeDefinition ref="subjectHash" />         <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>
  
     <AttributeDefinition xsi:type="Scoped" id="samlPairwiseID" scope="%{idp.scope}">     <AttributeDefinition xsi:type="Scoped" id="samlPairwiseID" scope="%{idp.scope}">
         <InputDataConnector ref="myStoredId" attributeNames="persistentId"/>         <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>     </AttributeDefinition>
  
Zeile 97: Zeile 60:
     <AttributeDefinition xsi:type="Scoped" id="eduPersonUniqueId" scope="%{idp.scope}">     <AttributeDefinition xsi:type="Scoped" id="eduPersonUniqueId" scope="%{idp.scope}">
         <InputAttributeDefinition ref="subjectHash" />         <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>     </AttributeDefinition>
  
Zeile 108: Zeile 65:
     <AttributeDefinition id="eduPersonTargetedID" xsi:type="SAML2NameID" nameIdFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">     <AttributeDefinition id="eduPersonTargetedID" xsi:type="SAML2NameID" nameIdFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">
         <InputDataConnector ref="myStoredId" attributeNames="persistentId"/>         <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>     </AttributeDefinition>
  
Zeile 148: Zeile 100:
         useStartTLS="%{idp.attribute.resolver.LDAP.useStartTLS:true}"         useStartTLS="%{idp.attribute.resolver.LDAP.useStartTLS:true}"
         connectTimeout="%{idp.attribute.resolver.LDAP.connectTimeout}"         connectTimeout="%{idp.attribute.resolver.LDAP.connectTimeout}"
-                trustFile="%{idp.attribute.resolver.LDAP.trustCertificates}" +        trustFile="%{idp.attribute.resolver.LDAP.trustCertificates}" 
-        responseTimeout="%{idp.attribute.resolver.LDAP.responseTimeout}">+        responseTimeout="%{idp.attribute.resolver.LDAP.responseTimeout}" 
 +        failFastInitialize="%{idp.pool.LDAP.failFastInitialize:false}">
         <FilterTemplate>         <FilterTemplate>
             <![CDATA[             <![CDATA[
Zeile 161: Zeile 114:
             validatePeriodically="%{idp.pool.LDAP.validatePeriodically:true}"             validatePeriodically="%{idp.pool.LDAP.validatePeriodically:true}"
             validateTimerPeriod="%{idp.pool.LDAP.validatePeriod:PT5M}"             validateTimerPeriod="%{idp.pool.LDAP.validatePeriod:PT5M}"
-            expirationTime="%{idp.pool.LDAP.idleTime:PT10M}" +            expirationTime="%{idp.pool.LDAP.idleTime:PT10M}" />
-            failFastInitialize="%{idp.pool.LDAP.failFastInitialize:false}" />+
     </DataConnector>     </DataConnector>
  
 </file> </file>
  
 +<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>
 +    <AttributeDefinition id="samlSubjectID" xsi:type="Prescoped">
 +        <InputAttributeDefinition ref="eduPersonUniqueId" />
 +    </AttributeDefinition>
 +</file>
 +</callout>
 ===== Attribute Filter ===== ===== 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. 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.
 +
 +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.
  
 <file xml /opt/shibboleth-idp/conf/attribute-filter.xml> <file xml /opt/shibboleth-idp/conf/attribute-filter.xml>
-    <AttributeFilterPolicy id="releaseToAAIplus">+     <AttributeFilterPolicy id="releaseToAAIplus">
  
        <PolicyRequirementRule         <PolicyRequirementRule 
Zeile 177: Zeile 141:
                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 221: Zeile 177:
           <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 268: Zeile 259:
 </file> </file>
  
-{{tag>idp3}}+{{tag>idp4 subjectIdentifierAttributes aaiplus attributfreigabe}}
  • Zuletzt geändert: vor 24 Monaten