Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte Überarbeitung Beide Seiten der Revision
de:shibidp3pidspecials [2016/08/09 12:52]
Wolfgang Pempe angelegt
de:shibidp3pidspecials [2019/04/02 09:20]
Silke Meyer [Generierung des Quellattributes mithilfe von zwei IdM-Attributen]
Zeile 2: Zeile 2:
  
 **Zur Persistent ID allgemein siehe unter [[de:​shibidp3storage|Storage und Persistent Identifier]].** **Zur Persistent ID allgemein siehe unter [[de:​shibidp3storage|Storage und Persistent Identifier]].**
 +
 +===== Generierung des Quellattributes mithilfe von zwei IdM-Attributen =====
 +
 +Beispiel der Hochschule Bremen zur Generierung des Quellattributes zur persistentId mithilfe von "​uid"​ und "​uidNumber":​
 +
 +<file xml attribute-resolver.xml>​
 + <​AttributeDefinition xsi:​type="​ScriptedAttribute"​ id="​uniqueIdentifier"​ >
 +    <​InputAttributeDefinition ref="​uid"​ />       
 +    <​InputAttributeDefinition ref="​uidNumber"​ />       
 +    <​Script>​
 +            <​![CDATA[
 +     ​  ​           uid= uid.getValues().get(0);​
 +                  uidNumber = uidNumber.getValues().get(0);​
 +       ​  ​           stringUidNumber = String(uidNumber);​
 +                    newIdentifier = uid+stringUidNumber;​
 +                    uniqueIdentifier.getValues().add(newIdentifier);​
 +           ​]]> ​      
 +    </​Script>​
 +</​AttributeDefinition>​
 +</​file>​
 +
 +===== Weitergabe der persistentId nur an bestimmte SPs =====
 +
 +Sofern Sie die persistendId nicht pauschal an alle SPs weitergeben wollen, kann dies in einem RelyingPartyOverride definiert werden.
 +
 +Dazu muss folgendes gemacht werden:
 +
 +  * im Default-Block wird nur die TransientId released
 +  * einen Override definieren in dem für gewissen entityIds die presistentId released wird.
 +
 +<file xml relying-party.xml>​
 +<beans ...>
 +  <!-- ... -->
 +  <bean id="​shibboleth.DefaultRelyingParty"​ parent="​RelyingParty">​
 +    <​property name="​profileConfigurations">​
 +       <​list>​
 +         <​bean parent="​Shibboleth.SSO" ​
 +               ​p:​postAuthenticationFlows="#​{{'​terms-of-use',​ '​attribute-release'​}}"​ />
 +         <​!-- ... -->
 +         <​bean parent="​SAML2.SSO" ​
 +               ​p:​postAuthenticationFlows="#​{{'​terms-of-use',​ '​attribute-release'​}}" ​
 +               ​p:​nameIDFormatPrecedence="​urn:​oasis:​names:​tc:​SAML:​2.0:​nameid-format:​transient"​ />
 +         <​!-- ... -->
 +        </​list>​
 +    </​property>​
 +  </​bean>​
 +  <​util:​list id="​shibboleth.RelyingPartyOverrides">​
 +     <​!-- ... -->
 +     <​!-- komma-separierte Liste der Entity IDs der berechtigten SPs -->
 +     <​bean parent="​RelyingPartyByName" ​
 +         ​c:​relyingPartyIds="#​{{'​https://​testsp3.aai.dfn.de/​shibboleth',​ '​https://​testsp2.aai.dfn.de/​shibboleth'​}}">​
 +         <​property name="​profileConfigurations">​
 +           <​list>​
 +             <​bean parent="​SAML2.SSO" ​
 +                   ​p:​postAuthenticationFlows="#​{{'​terms-of-use',​ '​attribute-release'​}}"​
 +                   ​p:​nameIDFormatPrecedence="#​{{'​urn:​oasis:​names:​tc:​SAML:​2.0:​nameid-format:​persistent',​ '​urn:​oasis:​names:​tc:​SAML:​2.0:​nameid-format:​transient'​}}"​
 +                   />
 +              <ref bean="​SAML2.ECP"​ />
 +              <ref bean="​SAML2.Logout"​ />
 +              <ref bean="​SAML2.AttributeQuery"​ />
 +              <ref bean="​SAML2.ArtifactResolution"​ />
 +              <ref bean="​Liberty.SSOS"​ />
 +           </​list>​
 +         </​property>​
 +     </​bean>​
 +  </​util:​list>​
 +</​beans>​
 +</​file>​
 +
  
 ===== Freigabe in Abhängigkeit zu anderen Attributen ===== ===== Freigabe in Abhängigkeit zu anderen Attributen =====
Zeile 7: Zeile 76:
  
 Da die persistentId in der aktuellen IdP-Version (3.2.1) standardmäßig nicht mehr als Attribut, sondern als NameIdentifier behandelt wird, so kann man diese zunächst nur global für bestimmte SPs in der /​conf/​relying-party.xml freischalten.\\ Da die persistentId in der aktuellen IdP-Version (3.2.1) standardmäßig nicht mehr als Attribut, sondern als NameIdentifier behandelt wird, so kann man diese zunächst nur global für bestimmte SPs in der /​conf/​relying-party.xml freischalten.\\
-Siehe weiter unten in folgendem Beitrag: ​**[[de:​shibidp3storage#​konfiguration_der_persistent-id|Weitere Konfigurationsschritte]]**+Siehe unter **[[de:​shibidp3storage#​konfiguration_der_persistent-id|Weitere Konfigurationsschritte]]**
  
 Nun hat man zwar die Möglichkeit mit Hilfe von [[https://​wiki.shibboleth.net/​confluence/​display/​IDP30/​ActivationConditions|ActivationConditions]] die NameIDGeneration weiter einzuschränken,​ jedoch existiert zu diesem Augenblick noch kein AttributContext.\\ Nun hat man zwar die Möglichkeit mit Hilfe von [[https://​wiki.shibboleth.net/​confluence/​display/​IDP30/​ActivationConditions|ActivationConditions]] die NameIDGeneration weiter einzuschränken,​ jedoch existiert zu diesem Augenblick noch kein AttributContext.\\
Zeile 81: Zeile 150:
 Wenn es sich um den oben genannten SP handelt und der Nutzer keinen der oben genannten Attribut-Werte aufweist, dann schlägt die Condition fehl und es wird keine persistentID generiert.\\ Wenn es sich um den oben genannten SP handelt und der Nutzer keinen der oben genannten Attribut-Werte aufweist, dann schlägt die Condition fehl und es wird keine persistentID generiert.\\
 In allen anderen Fällen sollte die Generierung der persistentID problemlos funktionieren. In allen anderen Fällen sollte die Generierung der persistentID problemlos funktionieren.
 +
 +===== Beispiel für den Wechsel des IdM-Quellattributs =====
 +
 +Das folgende wurde uns netterweise von den Kollegen der Uni Jena zur Verfügung gestellt und soll als Beispiel dienen wie bei Bedarf das IdM-Quellattribut gewechselt werden kann und dabei schon bestehende persistentIds zu erhalten
 +
 +==== Migration der persistendId-DB an der Uni Jena ====
 +
 +Ziel der Aktion war das Auswechseln des Quellattributs der persistentId (gespeichert in
 +einer PostgreSQL-Datenbank),​ die doch nicht so unique uid sollte hierbei durch die
 +eduPersonUniqueId ersetzt werden. Die eduPersonUniqueId bilden wir im IDM aus einer UUID
 +ohne Bindestriche mit Scope hinten dran (Beispiel:
 +0c845b14f1c643ccac9de204632512cd@uni-xy.de) und stellen sie per LDAP-Server zur Verfügung.
 +Der Shibboleth IdP ist Version 3.2.1.
 +
 +1.) Den IdP stoppen.
 +
 +2.) In /​opt/​shibboleth-idp/​conf/​saml-nameid.properties wird die Eigenschaft
 +idp.persistentId.sourceAttribute = eduPersonUniqueId gesetzt.
 +
 +3.) Die Werte der Spalte localid in der Tabelle shibpid müssen auf die jeweiligen Werte
 +des Attributs eduPersonUniqueId abgeändert werden. Ich habe mir für die ganze Aktion ein
 +Shellskript geschrieben.
 +3.1. - Man erzeugt sich einen Dump der Tabelle shibpid.
 +3.2. - Man arbeitet sich zeilenweise durch diesen Dump. Die Spalte principalname in der
 +Tabelle shibpid referenziert den Benutzernamen (uid). Über diesen sucht man nun im
 +LDAP-Server nach der jeweiligen eduPersonUniqueId und setzt in der Spalte localid deren
 +Wert anstelle des bisherigen ein.
 +
 +Beispiel: Aus...
 +  "​https://​idp.uni-xy.de/​idp/​shibboleth";"​https://​testsp2.aai.dfn.de/​shibboleth";"​aaidemo";"​aaidemo";"​Znc0wfn/​YabcZe7neb73Es123456";"";"​2014-08-12 14:​10:​47.29";""​
 +...wird so...
 +  "​https://​idp.uni-xy.de/​idp/​shibboleth";"​https://​testsp2.aai.dfn.de/​shibboleth";"​aaidemo";"​0e2cba36852b44d8be29e4168ec71e0d@uni-xy.de";"​Znc0wfn/​YabcZe7neb73Es123456";"";"​2014-08-12 14:​10:​47.29";""​
 +
 +3.3. - Man kopiert den modifizierten Dump zurück in die Tabelle shibpid.
 +
 +4.) Den IdP wieder starten und überprüfen,​ ob die Sache funktioniert hat.
 +
 +Übrig bleibt nun noch das Entfernen der uid als Bestandteil der Bildungsvorschriften
 +anderer Attribute, z.B. beim eduPersonPrincipalName (= uid + "​@uni-xy.de"​). An den
 +Bestandsnutzern kann man da nichts machen, der Plan ist aber, für neue Benutzer auch hier
 +eduPersonPrincipalName = eduPersonUniqueId auszuliefern. Das sollte dann für eine
 +ausreichende Kollisionsfreiheit sorgen. ​
 +
  • Zuletzt geändert: vor 3 Monaten