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:shibidp:config-testzugang [2022/11/28 13:58] Wolfgang Pempede:shibidp:config-testzugang [2025/03/10 14:16] (aktuell) Doreen Liebenau
Zeile 4: Zeile 4:
   * Ein neuer Service-Provider soll an den Identity-Provider einer Hochschule angebunden werden. Der SP wird von einem externen Partner administriert, dessen Mitarbeitende keine Angehörigen der Hochschule sind. Eine dieser Personen muss jedoch den Zugang zum SP via Shibboleth testen. Dazu benötigt sie einen Gastaccount bei der Hochschule um sich an deren IdP authentisieren zu können.   * Ein neuer Service-Provider soll an den Identity-Provider einer Hochschule angebunden werden. Der SP wird von einem externen Partner administriert, dessen Mitarbeitende keine Angehörigen der Hochschule sind. Eine dieser Personen muss jedoch den Zugang zum SP via Shibboleth testen. Dazu benötigt sie einen Gastaccount bei der Hochschule um sich an deren IdP authentisieren zu können.
   * Für den Zugang zu einem lokalen SP wird ein Funktionsaccount eingerichtet.    * Für den Zugang zu einem lokalen SP wird ein Funktionsaccount eingerichtet. 
-  * +
 **Das Problem:** Der Login über einen solchen Gast- oder Funktionsaccount darf keinen Zugriff auf andere Service-Provider ermöglichen.  **Das Problem:** Der Login über einen solchen Gast- oder Funktionsaccount darf keinen Zugriff auf andere Service-Provider ermöglichen. 
  
Zeile 58: Zeile 58:
         </constructor-arg>         </constructor-arg>
     </bean>     </bean>
- 
  
 <!-- ... --> <!-- ... -->
  
 +</beans>
 </file> </file>
  
-Dabei ist ''shibgast'' die uid des Gastaccounts, und ''%%https://sp.example.org/shibboleth%%'' die Entity Id des Service Providers, auf den diese Person Zugriff erhalten soll. Passen Sie diese Werte sowie den Namen des Quell-Attributs (hier ''uid'') bitte entsprechend an. Die Bedingung ist erfüllt, wenn  +Dabei ist ''shibgast'' die User Id des Gast-/Funktionsaccounts, und ''%%https://sp.example.org/shibboleth%%'' die Entity Id des Service Providers, auf den diese Person(en) Zugriff erhalten soll(en). Passen Sie diese Werte sowie den Namen des Quell-Attributs (hier ''uid'') bitte entsprechend an. Die Bedingung ist erfüllt, wenn  
-  * eine Person sich //nicht// mit "shibgastangemeldet hat oder +  * eine Person sich //nicht// mit ''shibgast'' angemeldet hat oder 
   * eine Person auf den fraglichen SP zugreift.    * eine Person auf den fraglichen SP zugreift. 
-Anders ausgedrückt: Wenn "shibgastsich mit einem anderen SP verbindet, ist die Bedingung nicht erfüllt und der Context Check - und somit auch die Anmeldung - schlagen fehl.+Anders ausgedrückt: Wenn ''shibgast'' sich mit einem anderen SP verbindet, ist die Bedingung nicht erfüllt und der Context Check - und somit auch die Anmeldung - schlagen fehl.
  
 +Der Context Ceck muss dann noch zu den Post-Authentication-Flows in ''relying-party.xml'' hinzugefügt werden:
  
-FIXME: Den Kram unten noch überarbeiten +<file xml /opt/shibboleth-idp/conf/relying-party.xml>
- +
-Diese Datei muss in ''services.xml'' referenziert werden: +
-<file xml /opt/shibboleth-idp/conf/services.xml>+
 <!-- ... --> <!-- ... -->
-    <util:list id ="shibboleth.AttributeResolverResources"+    <bean parent="SAML2.SSOp:postAuthenticationFlows="#{'terms-of-use', 'context-check', 'attribute-release'}/>
-        <value>%{idp.home}/conf/attribute-resolver.xml</value> +
-        <value>%{idp.home}/conf/shibgast_resolver_condition.xml</value> +
-    </util:list>+
 <!-- ... --> <!-- ... -->
 </file> </file>
  
-Schließlich ergänzt man die Definition der Daten-Konnektoren um das Attribut ''activationConditionRef'': +Anschließend den IdP neu starten
-<file xml /opt/shibboleth-idp/conf/attribute-resolver.xml> +
-<!-- ... --> +
-    <DataConnector id="myLDAP" xsi:type="LDAPDirectory" +
-        activationConditionRef="shibgast_resolver_condition" +
-        ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}" +
-<!-- ... --> +
-</file> +
-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}}+{{tag>idp5}}
  • Zuletzt geändert: vor 2 Jahren