Konfiguration Anwendungsszenario normal
In allen Konfigurationsbeispielen muss APPSESSIONNAME durch den Cookie-Namen der zu schützen Anwendung ersetzt werden, die den Identifier der Anwendungs-Session enthält.
Einrichtung für SessionHook
Das Skript checker.php, welches von Shibd beim Login einmal über den SessionHook aufgerufen wird, muss auch in einem komplett durch Shibboleth geschützten Verzeichnis liegen. Die Konfiguration darf nur bei den Anwendungsszenarien normal und lazy erfolgen, nicht bei mixedLazy!
Konfiguration Apache 2.4:
- httpd.conf
<Location /checker> authType shibboleth ShibRequestSetting requireSession true ShibUseHeaders on RewriteEngine On #den Wert der Anwendungssession merken um die Anwendungssession sauber zerstören zu können RewriteCond %{HTTP:Cookie} APPSESSIONNAME=([^;]+) RewriteRule .* - [E=appsid:%1] #Test der Werte mit RewriteMap-Skript ohne mixedLazy RewriteCond ${shibchecker:sessionHook,%{HTTP:Shib-Session-ID},APPSESSIONNAME,%{HTTP:Cookie}} ^doLogout$ RewriteRule .* https://sp.beispiel-uni.de/Path/To/remsess.php?appsid=%{ENV:appsid} #mit mixedLazy darf der Aufruf nicht erfolgen, da in diesem Modus das Einschleusen einer Anwendungssession #vor der Shib-Anmeldung nicht zu verhindern ist. #Es wird jedoch vom shibchecker geprüft, ob die Anwendungssession bereits vergeben war. #FALSCH bei mixedLazy #RewriteCond ${shibchecker:sessionHook,%{HTTP:Shib-Session-ID},APPSESSIONNAME,%{HTTP:Cookie},mixedLazy} ^doLogout$ </Location>
Konfiguration Shibboleth:
- shibboleth2.xml
<ApplicationDefaults entityID="https://sp.beispiel-uni.de/shibboleth" REMOTE_USER="uid" sessionHook="/checker/checker.php">
Schutz der Anwendung
Konfiguration Apache 2.4:
- httpd.conf
<Location /NORMALAPPLICATION> authType shibboleth ShibRequestSetting requireSession true ShibUseHeaders on <RequireAll> Require shib-attr eppn ~ ^foo*@beispiel-uni.de$ Require shib-attr eduPersonEntitlement ~ ^urn:beispiel-uni.de:foobar$ </RequireAll> #prüfen, ob die Anfrage gültig ist und ggf. das Logout durchführen #ACHTUNG: Erst die Anwendungssession zerstören und das das Shibboleth-Logout! RewriteEngine On RewriteCond ${shibchecker:normal,%{HTTP:Shib-Session-ID},APPSESSIONNAME,%{HTTP:Cookie}} ([^;]+) #Um die Aufrufe zu minimieren, wird das Ergebnis in einer Umgebungsvariable gespeichert und dann können #die verschiedenen Rückgabewerte wieder in einzelnen Bedingungen ausgewertet werden RewriteRule .* - [E=shibcheckertype:%1] #Anwendungssession bekannt machen? - Anwendungssession muss noch initialisiert (shibchecker bekannt #gemacht werden) werden, damit das Anwendungs-Cookie nicht verändert werden kann #bevorzugt RewriteCond %{ENV:shibcheckertype} ^doAppSession$ #über ein extra Skript, wenn ohne weiteres die Anwendungssession initialisiert werden kann RewriteRule .* https://sp.beispiel-uni.de/Path/To/initsess.php #oder über Refresh-Header, falls man das Initialisieren der Anwendungssession nicht selbst triggern kann #RewriteCond %{ENV:shibcheckertype} ^doAppSession$ #RewriteRule .* - [E=doAppSession:1] #Header set Refresh "0" env=doAppSession #Logout? RewriteCond %{ENV:shibcheckertype} ^doLogout$ RewriteRule .* https://sp.beispiel-uni.de/Path/To/remsess.php?appsid=%{ENV:appsid} </Location>