Dies ist eine alte Version des Dokuments!


Sonderfälle bei Generierung und Weitergabe der Persistent ID

Zur Persistent ID allgemein siehe unter Storage und Persistent Identifier.

Möchte man die Freigabe der persistentId an einen SP weiter einschränken, ähnlich den Attribut-Filterregeln, ohne dabei den V2-Legacy-Support zu aktivieren so muss man etwas tüfteln.

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 unter Weitere Konfigurationsschritte

Nun hat man zwar die Möglichkeit mit Hilfe von ActivationConditions die NameIDGeneration weiter einzuschränken, jedoch existiert zu diesem Augenblick noch kein AttributContext.
Somit kann man in der /conf/relying-party.xml keine Abhängigkeit zu anderen Attributen abbilden, da diese erst nach dem Login des Nutzers ausgelesen werden.

Um die persistentId wie gewünscht denoch nur dann an einen SP auszuliefern, wenn der Nutzer z.B. einen bestimmten Wert für das Attribut eduPersonEntitlement aufweist, so muss man dieses Vorhaben nun in zwei Schritte aufteilen.
Zunächst geben wir die ID global für den SP frei.

/conf/relying-party.xml
<!-- ... -->
 
<util:list id="shibboleth.RelyingPartyOverrides">
        <bean parent="RelyingPartyByName" c:relyingPartyIds="#{{
                'https://e5.onthehub.com'
                }}">
 
                <property name="profileConfigurations">
                        <list>
                                <bean parent="SAML2.SSO" p:postAuthenticationFlows="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.Logout" />
                                <ref bean="SAML2.AttributeQuery" />
                                <ref bean="SAML2.ArtifactResolution" />
                        </list>
                </property>
        </bean>
 
<!-- ... -->

Anschließend definieren wir eine Condition mit all unseren Anforderungen an ein Attribut und referenzieren diese als Abhängigkeit bei der Generierung der ID.

/system/conf/saml-nameid-system.xml
<!-- ... -->
 
    <bean id="shibboleth.SAML2PersistentGenerator" lazy-init="true"
            class="net.shibboleth.idp.saml.nameid.impl.PersistentSAML2NameIDGenerator"
            p:useUnfilteredAttributes="%{idp.persistentId.useUnfilteredAttributes:true}"
            p:persistentIdGenerator-ref="#{'%{idp.persistentId.generator:shibboleth.ComputedPersistentIdGenerator}'.trim()}"
            p:activationCondition-ref="dreamspark">
        <property name="attributeSourceIds">
            <bean parent="shibboleth.CommaDelimStringArray" c:_0="#{'%{idp.persistentId.sourceAttribute:}'.trim()}" />
        </property>
    </bean>
 
        <bean id="dreamspark" parent="shibboleth.Conditions.OR">
                <constructor-arg>
                        <list>
                                <bean parent="shibboleth.Conditions.NOT">
                                        <constructor-arg>
                                                <bean parent="shibboleth.Conditions.RelyingPartyId" c:_0="https://e5.onthehub.com" />
                                        </constructor-arg>
                                </bean>
                                <bean class="net.shibboleth.idp.profile.logic.SimpleAttributePredicate" p:useUnfilteredAttributes="true">
                                        <property name="attributeValueMap">
                                                <map>
                                                        <entry key="eduPersonEntitlement">
                                                                <list>
                                                                        <value>Dreamspark-Premium-User-Wirtschaft</value>
                                                                        <value>Dreamspark-Premium-User-Informatik</value>
                                                                </list>
                                                        </entry>
                                                </map>
                                        </property>
                                </bean>
                        </list>
                </constructor-arg>
        </bean>
 
<!-- ... -->

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.

  • Zuletzt geändert: vor 3 Jahren