Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
de:shibidp:config-testzugang [2021/05/03 14:13] Silke Meyerde:shibidp:config-testzugang [2022/11/28 13:58] Wolfgang Pempe
Zeile 1: Zeile 1:
-====== Testzugang für externe bzw. SP-Admins ======+====== Zugriff einzelner User auf bestimmte SPs beschränken ======
  
-<callout color="#ff9900" title="Archiv"> +**Anwendungsfälle:**  
-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+  * Ein neuer Service-Provider soll an den Identity-Provider einer Hochschule angebunden werdenDer SP wird von einem externen Partner administriertdessen 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. 
-</callout>+  * 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 Szenario:** Ein neuer SP soll an den IdP angebunden werdenDer SP wird von einem externen Partner administriertder kein Angehöriger der Hochschule istDieser Admin möchte jetzt den Zugang zum SP via Shibboleth testenDazu braucht er einen Gastaccount auf dem IdP.+**Die Lösung:** Der Shibboleth-IdP (ab Version 4.1.x) wird so konfiguriertdass beim Login über einen [[https://shibboleth.atlassian.net/wiki/spaces/IDP4/pages/1265631716/ContextCheckInterceptConfiguration|Context Check Interceptor]] die Entity ID des anfragenden Service-Providers und die Nutzerkennung des aktuellen Users gegen eine entsprechende Regel abgeglichen werden. Handelt es sich um einen Gast-/Funktionsaccount, der auf einen "verbotenen" SP zugreifen will, wird der Anmeldevorgang abgebrochen.
  
-**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.+Hierzu muss zunächst das Modul ''idp.intercept.ContextCheck'' aktiviert werden:
  
-**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 wirdFalls der Gastaccount versucht, auf einen anderen SP zuzugreifen, werden keine Attribute weitergegeben, so dass dieser andere SP den Zugang verweigert.+<code> 
 +(Windows) 
 +C:\opt\shibboleth-idp> bin\module.bat -t idp.intercept.ContextCheck || bin\module.bat -e idp.intercept.ContextCheck 
 +  
 +(Other) 
 +$ bin/module.sh -t idp.intercept.ContextCheck || bin/module.sh -e idp.intercept.ContextCheck 
 +</code>
  
-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:+Anschließend wird die entsprechende Bedingung formuliert:
  
-<file xml /opt/shibboleth-idp/conf/shibgast_resolver_condition.xml+<file xml /opt/shibboleth-idp/conf/intercept/context-check-intercept-config.xml>
-<?xml version="1.0" encoding="UTF-8"?>+
 <beans xmlns="http://www.springframework.org/schema/beans" <beans xmlns="http://www.springframework.org/schema/beans"
-    xmlns:util="http://www.springframework.org/schema/util" +       xmlns:context="http://www.springframework.org/schema/context" 
-    xmlns:p="http://www.springframework.org/schema/p" +       xmlns:util="http://www.springframework.org/schema/util" 
-    xmlns:c="http://www.springframework.org/schema/c" +       xmlns:p="http://www.springframework.org/schema/p" 
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +       xmlns:c="http://www.springframework.org/schema/c" 
-    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd +       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd +       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
-                        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.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">+                            
 +       default-init-method="initialize" 
 +       default-destroy-method="destroy"> 
 + 
 +    <bean id="shibboleth.context-check.Condition" parent="shibboleth.Conditions.OR">
         <constructor-arg>         <constructor-arg>
-        <list> +            <list> 
-            <bean parent="shibboleth.Conditions.NOT"> +               <bean parent="shibboleth.Conditions.RelyingPartyIdc:candidates="#{{'https://sp.example.org/shibboleth'}}" /
-                <constructor-arg> +               <bean parent="shibboleth.Conditions.NOT"> 
-                <bean parent="shibboleth.Conditions.Expression"> +                  <constructor-arg> 
-                    <constructor-arg> +                     <bean class="net.shibboleth.idp.profile.logic.SimpleAttributePredicate" 
-                    <value> +                           p:useUnfilteredAttributes="true"> 
-                        #profileContext.getSubcontext(T(net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext)).principal.equals("shibgast") +                        <property name="attributeValueMap"> 
-                    </value> +                          <map> 
-                    </constructor-arg+                            <entry key="uid"> 
-                </bean+                                <list> 
-                </constructor-arg+                                    <value>shibgast</value> 
-            </bean+                                </list
-            <bean parent="shibboleth.Conditions.RelyingPartyId" c:candidate="https://neuer_sp.example.org/shibboleth"/+                            </entry
-        </list>+                          </map
 +                       </property
 +                     </bean
 +                  </constructor-arg> 
 +               </bean
 +            </list>
         </constructor-arg>         </constructor-arg>
     </bean>     </bean>
-  + 
-</beans>+ 
 +<!-- ... -->
  
 </file> </file>
  
-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  +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  
-  * der Benutzer sich //nicht// mit "shibgast" angemeldet hat oder  +  * eine Person sich //nicht// mit "shibgast" angemeldet hat oder  
-  * der Benutzer sich mit dem neuen SP verbindet.  +  * eine Person auf den fraglichen SP zugreift.  
-Anders ausgedrückt: Wenn "shibgast" sich mit einem anderen SP verbindet, ist die Bedingung nicht erfüllt und der Konnektor wird nicht aktiviert.+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. 
 + 
 + 
 +FIXME: Den Kram unten noch überarbeiten
  
 Diese Datei muss in ''services.xml'' referenziert werden: Diese Datei muss in ''services.xml'' referenziert werden:
  • Zuletzt geändert: vor 17 Monaten