Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung Nächste ÜberarbeitungBeide Seiten der Revision | ||
de:shibidp3testzugang_fuer_externe_admins [2017/08/29 09:13] – Raoul Gunnar Borenius | de:shibidp:config-testzugang [2022/11/28 15:39] – Wolfgang Pempe | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== | + | ====== |
- | **Das Szenario: | + | |
- | Ein neuer SP soll an den IdP angebunden werden. Der SP wird von einem externen Partner administriert, | + | |
- | Das Problem: Die gleichen Attribute, die für das Login zu dem neuen SP nötig sind, gewähren möglicherweise auch Zugang | + | **Anwendungsfälle:** |
+ | * 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 | ||
+ | * 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 | ||
- | Lösung: Der IdP wird so konfiguriert, | + | **Die Lösung:** Der Shibboleth-IdP (ab Version 4.1.x) |
- | Dazu ergänzt man im AttributeResolver die Definition der Daten-Konnektoren um eine Aktivierungsbedingung. | + | Hierzu muss zunächst das Modul '' |
+ | |||
+ | < | ||
+ | (Windows) | ||
+ | C: | ||
- | Zuerst legt man eine neue Datei an, in der das Bean mit der Bedingung definiert | + | (Other) |
- | <file xml / | + | $ bin/ |
- | <?xml version=" | + | </ |
+ | |||
+ | Anschließend | ||
+ | |||
+ | <file xml / | ||
<beans xmlns=" | <beans xmlns=" | ||
- | | + | |
- | xmlns: | + | xmlns: |
- | xmlns: | + | |
- | xmlns: | + | |
- | xsi: | + | |
- | http:// | + | |
- | http:// | + | |
- | + | | |
- | <bean id="shibgast_resolver_condition" parent=" | + | |
+ | | ||
+ | | ||
+ | |||
+ | <bean id="shibboleth.context-check.Condition" parent=" | ||
< | < | ||
- | | + | |
- | <bean parent=" | + | |
- | < | + | |
- | | + | < |
- | < | + | |
- | <value> | + | |
- | # | + | < |
- | </ | + | < |
- | </constructor-arg> | + | <entry key=" |
- | </bean> | + | < |
- | </constructor-arg> | + | < |
- | </bean> | + | </list> |
- | < | + | </entry> |
- | </ | + | </map> |
+ | | ||
+ | | ||
+ | </constructor-arg> | ||
+ | </bean> | ||
+ | </ | ||
</ | </ | ||
</ | </ | ||
- | |||
- | </ | ||
- | </ | ||
- | Dabei ist '' | ||
- | Die Bedingung ist erfüllt, wenn der Benutzer sich nicht mit " | ||
- | |||
- | Diese Datei muß in '' | ||
- | <file xml / | ||
<!-- ... --> | <!-- ... --> | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | <!-- ... --> | ||
- | </ | ||
- | Schließlich ergänzt man die Definition der Daten-Konnektoren um das Attribut '' | ||
- | <file xml / | ||
- | <!-- ... --> | ||
- | < | ||
- | activationConditionRef=" | ||
- | ldapURL=" | ||
- | <!-- ... --> | ||
</ | </ | ||
- | Dieses Attribut muß bei allen Daten-Konnektoren eingefügt werden, auch bei dem für die statischen Attribute. | ||
- | ==== Alternative Activation Condition ==== | + | Dabei ist '' |
+ | * eine Person sich //nicht// mit '' | ||
+ | * eine Person auf den fraglichen SP zugreift. | ||
+ | Anders ausgedrückt: | ||
- | Alternativ sollte auch diese Activation-Condition auf Java-Script-Basis funktionieren: | + | Der Context Ceck muss dann noch zu den Post-Authentication-Flows in '' |
- | <file xml> | + | <file xml /opt/shibboleth-idp/conf/relying-party.xml> |
- | <?xml version=" | + | <!-- ... --> |
- | <beans | + | <bean parent=" |
- | xmlns=" | + | <!-- ... --> |
- | xmlns: | + | |
- | xmlns: | + | |
- | xmlns: | + | |
- | xmlns: | + | |
- | xsi: | + | |
- | | + | |
- | http://www.springframework.org/ | + | |
- | + | ||
- | <bean | + | |
- | id=" | + | |
- | | + | |
- | factory-method="inlineScript"> | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | var adminsAndServices = { | + | |
- | // | + | |
- | //" | + | |
- | //" | + | |
- | }; | + | |
- | + | ||
- | 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(" | + | |
- | 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> | + | |
- | </ | + | |
- | + | ||
- | </ | + | |
- | </beans> | + | |
</ | </ | ||
- | Herzlichen Dank an Ramon Pfeiffer aus Tübingen für diese Variante! | + | Anschließend den IdP neu starten. |