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:shibidp3pidspecials [2016/08/09 12:57]
Wolfgang Pempe
de:shibidp3pidspecials [2019/04/02 09:20] (aktuell)
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 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 Jahren