====== Sonderfälle bei Generierung und Weitergabe der Persistent ID ====== **Zur Persistent ID allgemein siehe unter [[de:shibidp:config-storage|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": ===== 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 freigegeben * einen Override definieren, in dem für gewisse EntityIds die persistentId freigegeben wird ===== Freigabe in Abhängigkeit von anderen Attributen ===== Möchte man die Freigabe der persistentId analog zu Attribut-Filterregeln weiter einschränken, sind mehrere Schritte nötig. Man kann zwar mit Hilfe von [[https://wiki.shibboleth.net/confluence/display/IDP4/ActivationConditions|ActivationConditions]] die NameIDGeneration einschränken, jedoch existiert zu diesem Zeitpunkt noch kein AttributContext. Man kann deshalb in der ''/conf/relying-party.xml'' keine Abhängigkeit zu anderen Attributen abbilden: Diese werden erst nach dem Login der Nutzer*innen ausgelesen. Um die persistentId dennoch nur dann an einen SP auszuliefern, wenn Nutzer*innen z.B. ein bestimmtes Entitlement haben, muss man wie folgt vorgehen: - globale Freigabe der persistentID für den SP: - Definition einer Condition mit allen [[https://wiki.shibboleth.net/confluence/display/IDP4/ActivationConditions#ActivationConditions-AttributeChecking|Anforderungen an ein Attribut]] und Referenzierung als Abhängigkeit bei der Generierung der persistentID: Dreamspark-Premium-User-Wirtschaft Dreamspark-Premium-User-Informatik Dadurch ist folgendes Verhalten des IdP konfiguriert: Wenn es sich um den konfigurierten SP handelt und die Nutzer*innen keinen der oben genannten Attribut-Werte aufweisen, dann schlägt die Condition fehl: Es wird keine persistentID generiert. In allen anderen Fällen sollte die Generierung der persistentID problemlos funktionieren. ===== Beispiel für den Wechsel des IdM-Quellattributs ===== Das Beispiel der Uni Jena zeigt, wie bei Bedarf das IdM-Quellattribut gewechselt werden kann, aus dem persistentIDs generiert werden, und wie dabei schon bestehende persistentIds erhalten bleiben. ==== Migration der persistentId-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 war Version 3.2.1. - Den IdP stoppen. - In ''/opt/shibboleth-idp/conf/saml-nameid.properties'' wird die Eigenschaft ''idp.persistentId.sourceAttribute = eduPersonUniqueId'' gesetzt. - 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. - Man erzeugt sich einen Dump der Tabelle ''shibpid''. - 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";"" - Man kopiert den modifizierten Dump zurück in die Tabelle ''shibpid''. - 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. {{tag>idp4}}