Dies ist eine alte Version des Dokuments!


Testzugang für externe bzw. SP Admins

*Das Szenario:*
Ein neuer SP soll an den IdP angebunden werden. Der SP wird von einem externen Partner administriert, der kein Angehöriger der Hochschule ist. Dieser Admin möchte jetzt den Zugang zum SP via Shibboleth testen. Dazu braucht er einen Gastaccount auf dem IdP.

Das Problem: Die gleichen Attribute, die für das Login zu dem neuen SP nötig sind, gewähren möglicherweise auch Zugang zu anderen SPs, auf die der externe Admin keinen Zugriff haben soll.

Lösung: Der IdP wird so konfiguriert, daß beim Anmelden mit dem Gastaccount die Attributwerte nur dann erzeugt werden, wenn eine Verbindung zu dem neuen SP aufgebaut wird. Falls der Gastaccount versucht, auf einen anderen SP zuzugreifen, werden keine Attribute weitergegeben, so daß dieser andere SP den Zugang verweigert.

Dazu ergänzt man im AttributeResolver die Definition der Daten-Konnektoren um eine Aktivierungsbedingung.

Zuerst legt man eine neue Datei an, in der das Bean mit der Bedingung definiert wird:

/opt/shibboleth-idp/conf/shibgast_resolver_condition.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:c="http://www.springframework.org/schema/c"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
                        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
 
    <bean id="shibgast_resolver_condition" parent="shibboleth.Conditions.OR">
        <constructor-arg>
        <list>
            <bean parent="shibboleth.Conditions.NOT">
                <constructor-arg>
                <bean parent="shibboleth.Conditions.Expression">
                    <constructor-arg>
                    <value>
                        #profileContext.getSubcontext(T(net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext)).principal.equals("shibgast")
                    </value>
                    </constructor-arg>
                </bean>
                </constructor-arg>
            </bean>
            <bean parent="shibboleth.Conditions.RelyingPartyId" c:_0="https://neuer_sp.example.org/shibboleth"/>
        </list>
        </constructor-arg>
    </bean>
 
</beans>

Dabei ist shibgast die uid des Gastaccounts, und https://neuer_sp.example.org/shibboleth die entityId des neuen Service Providers. Diese Werte bitte entsprechend anpassen.
Die Bedingung ist erfüllt, wenn der Benutzer sich nicht mit „shibgast“ angemeldet hat oder der Benutzer sich mit dem neuen SP verbindet. Anders ausgedrückt: Wenn „shibgast“ sich mit einem anderen SP verbindet, ist die Bedingung nicht erfüllt und der Konnektor wird nicht aktiviert.

Diese Datei muß in services.xml referenziert werden:

/opt/shibboleth-idp/conf/services.xml
<!-- ... -->
    <util:list id ="shibboleth.AttributeResolverResources">
        <value>%{idp.home}/conf/attribute-resolver.xml</value>
        <value>%{idp.home}/conf/shibgast_resolver_condition.xml</value>
    </util:list>
<!-- ... -->

Schließlich ergänzt man die Definition der Daten-Konnektoren um das Attribut activationConditionRef:

/opt/shibboleth-idp/conf/attribute-resolver.xml
<!-- ... -->
    <resolver:DataConnector id="myLDAP" xsi:type="dc:LDAPDirectory"
        activationConditionRef="shibgast_resolver_condition"
        ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}"
<!-- ... -->

Dieses Attribut muß bei allen Daten-Konnektoren eingefügt werden, auch bei dem für die statischen Attribute.

  • Zuletzt geändert: vor 8 Jahren