Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
de:shibidp:config-testzugang [2021/05/03 14:13] – Silke Meyer | de:shibidp:config-testzugang [2022/11/28 15:41] – Wolfgang Pempe | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== | + | ====== |
- | <callout color="# | + | **Anwendungsfälle: |
- | Dieser Artikel ist ein Community-Beitrag für Shibboleth IdP 3.x. Es ist unklar, ob er für Shibboleth IdP 4.x so noch gilt. | + | * 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 |
- | </ | + | * 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 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 | + | **Die Lösung:** Der Shibboleth-IdP (ab Version 4.1.x) wird so konfiguriert, dass beim Login über einen [[https:// |
- | **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 |
- | **Die Lösung:** Der IdP wird so konfiguriert, | + | < |
+ | (Windows) | ||
+ | C:\opt\shibboleth-idp> | ||
+ | |||
+ | (Other) | ||
+ | $ bin/ | ||
+ | </ | ||
- | Dazu ergänzt man im Attribute-Resolver | + | Anschließend wird die entsprechende |
- | <file xml / | + | <file xml / |
- | <?xml version=" | + | |
<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 '' | + | Dabei ist '' |
- | * der Benutzer | + | * eine Person |
- | * der Benutzer sich mit dem neuen SP verbindet. | + | * eine Person auf den fraglichen |
- | Anders ausgedrückt: | + | Anders ausgedrückt: |
- | Diese Datei muss in '' | + | Der Context Ceck muss dann noch zu den Post-Authentication-Flows |
- | <file xml / | + | |
- | <!-- ... --> | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | </ | + | |
- | <!-- ... --> | + | |
- | </ | + | |
- | Schließlich ergänzt man die Definition der Daten-Konnektoren um das Attribut '' | + | <file xml / |
- | <file xml / | + | |
<!-- ... --> | <!-- ... --> | ||
- | <DataConnector id="myLDAP" | + | <bean parent="SAML2.SSO" |
- | activationConditionRef=" | + | |
- | ldapURL=" | + | |
<!-- ... --> | <!-- ... --> | ||
</ | </ | ||
- | 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=" | ||
- | <!-- | ||
- | author: Ramon Pfeiffer | ||
- | organisation: | ||
- | 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=" | ||
- | xmlns: | ||
- | xmlns: | ||
- | xmlns: | ||
- | xmlns: | ||
- | xsi: | ||
- | http:// | ||
- | http:// | ||
- | |||
- | <bean | ||
- | id=" | ||
- | parent=" | ||
- | factory-method=" | ||
- | < | ||
- | < | ||
- | < | ||
- | var adminsAndServices = { | ||
- | // | ||
- | //" | ||
- | //" | ||
- | }; | ||
- | |||
- | value = true; | ||
- | for(admin in adminsAndServices){ | ||
- | value = value && canAccess(admin, | ||
- | } | ||
- | |||
- | value; | ||
- | |||
- | function canAccess(user, | ||
- | return isAdministratedService(service) || !isServiceAdministrator(user); | ||
- | } | ||
- | |||
- | function isAdministratedService(service){ | ||
- | rpCtx = profileContext.getSubcontext(" | ||
- | return rpCtx != null && rpCtx.getRelyingPartyId().equals(service); | ||
- | } | ||
- | |||
- | function isServiceAdministrator(user){ | ||
- | arCtx = profileContext.getSubcontext(" | ||
- | return arCtx != null && arCtx.principal.equals(user); | ||
- | } | ||
- | ]]> | ||
- | </ | ||
- | </ | ||
- | |||
- | </ | ||
- | </ | ||
- | </ | ||
- | |||
- | Herzlichen Dank an Ramon Pfeiffer aus Tübingen für diese Variante! | ||
- | {{tag> | + | Anschließend den IdP neu starten. |