Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
de:shibidp3testzugang_fuer_externe_admins [2016/03/30 13:10] – angelegt Wolfgang Pempede:shibidp:config-testzugang [2021/05/03 14:13] Silke Meyer
Zeile 1: Zeile 1:
-Das Szenario:\\ +====== Testzugang für externe bzw. SP-Admins ======
-Ein neuer SP soll an den IdP angebunden werdenDer 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 sindgewähren möglicherweise auch Zugang zu anderen SPs, auf die der externe Admin keinen Zugriff haben soll.+<callout color="#ff9900" title="Archiv"> 
 +Dieser Artikel ist ein Community-Beitrag für Shibboleth IdP 3.x. Es ist unklarob er für Shibboleth IdP 4.x so noch gilt. 
 +</callout>
  
-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.+**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. 
 + 
 +**Die Lösung:** Der IdP wird so konfiguriert, dass 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 dass dieser andere SP den Zugang verweigert. 
 + 
 +Dazu ergänzt man im Attribute-Resolver die Definition der Daten-Konnektoren um eine Aktivierungsbedingung. Zuerst legt man eine neue Datei an, in der das Bean mit der Bedingung definiert wird:
  
-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: 
 <file xml /opt/shibboleth-idp/conf/shibgast_resolver_condition.xml> <file xml /opt/shibboleth-idp/conf/shibgast_resolver_condition.xml>
 <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
Zeile 34: Zeile 38:
                 </constructor-arg>                 </constructor-arg>
             </bean>             </bean>
-            <bean parent="shibboleth.Conditions.RelyingPartyId" c:_0="https://neuer_sp.example.org/shibboleth"/>+            <bean parent="shibboleth.Conditions.RelyingPartyId" c:candidate="https://neuer_sp.example.org/shibboleth"/>
         </list>         </list>
         </constructor-arg>         </constructor-arg>
Zeile 42: Zeile 46:
  
 </file> </file>
-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. 
  
 +Dabei ist ''shibgast'' die uid des Gastaccounts, und ''%%https://neuer_sp.example.org/shibboleth%%'' die entityId des neuen Service Providers. Passen Sie diese Werte bitte entsprechend an. 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:+Diese Datei muss in ''services.xml'' referenziert werden:
 <file xml /opt/shibboleth-idp/conf/services.xml> <file xml /opt/shibboleth-idp/conf/services.xml>
 <!-- ... --> <!-- ... -->
Zeile 59: Zeile 65:
 <file xml /opt/shibboleth-idp/conf/attribute-resolver.xml> <file xml /opt/shibboleth-idp/conf/attribute-resolver.xml>
 <!-- ... --> <!-- ... -->
-    <resolver:DataConnector id="myLDAP" xsi:type="dc:LDAPDirectory"+    <DataConnector id="myLDAP" xsi:type="LDAPDirectory"
         activationConditionRef="shibgast_resolver_condition"         activationConditionRef="shibgast_resolver_condition"
         ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}"         ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}"
 <!-- ... --> <!-- ... -->
 </file> </file>
-Dieses Attribut muß bei allen Daten-Konnektoren eingefügt werden, auch bei dem für die statischen Attribute.+Dieses Attribut muss bei allen Daten-Konnektoren eingefügt werden, auch bei dem für die statischen Attribute. 
 + 
 +==== Alternative Activation Condition ==== 
 + 
 +Alternativ sollte auch diese Activation-Condition auf Java-Script-Basis funktionieren: 
 + 
 +<file xml> 
 +<?xml version="1.0" encoding="UTF-8"?> 
 +<!-- 
 + author: Ramon Pfeiffer 
 + organisation: Universität Tübingen - ZDV 
 + email: ramon.pfeiffer@uni-tuebingen.de 
 + date: 2017-08-24 
 +  
 + This file is free to use for any purposes, without any warranty, as long as you keep this comment intact. 
 +--> 
 +<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="activation-condition-ExternalAdmin" 
 +        parent="shibboleth.Conditions.Scripted" 
 +        factory-method="inlineScript"> 
 +        <constructor-arg> 
 +            <value> 
 +<![CDATA[ 
 +    var adminsAndServices = { 
 + //Wertepaare können hier kommasepariert eingetragen werden 
 + //"admin1" : "service1", 
 + //"admin2" : "service2" 
 +    }; 
 + 
 +    value = true; 
 +    for(admin in adminsAndServices){ 
 +        value = value && canAccess(admin, adminsAndServices[admin]); 
 +    } 
 + 
 +    value; 
 + 
 +    function canAccess(user, service){ 
 +        return isAdministratedService(service) || !isServiceAdministrator(user); 
 +   } 
 + 
 +    function isAdministratedService(service){ 
 +        rpCtx = profileContext.getSubcontext("net.shibboleth.idp.profile.context.RelyingPartyContext"); 
 +        return rpCtx != null && rpCtx.getRelyingPartyId().equals(service); 
 +    } 
 + 
 +    function isServiceAdministrator(user){ 
 +        arCtx = profileContext.getSubcontext("net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext"); 
 +        return arCtx != null && arCtx.principal.equals(user); 
 +    } 
 +]]> 
 +            </value> 
 +        </constructor-arg> 
 + 
 +    </bean> 
 +</beans> 
 +</file> 
 + 
 +Herzlichen Dank an Ramon Pfeiffer aus Tübingen für diese Variante!
  
 +{{tag>archiv}}
  • Zuletzt geändert: vor 17 Monaten