Konfiguration Anwendungsszenario lazy
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
Die Einrichtung für SessionHook ist identisch der Konfiguration Anwendungsszenario normal.
Schutz der Anwendung
Konfiguration Apache 2.4: Login
- httpd.conf
<Location /LOGINLAZY> #KEINE Prüfung mit RewriteMap-Skript, da die Prüfung in der <Location /LAZYAPPLICATION> der Anwendung erfolgt.!!! authType shibboleth ShibRequestSetting requireSession true <RequireAll> Require shib-attr eppn ~ ^foo*@beispiel-uni.de$ Require shib-attr eduPersonEntitlement ~ ^urn:beispiel-uni.de:foobar$ </RequireAll> </Location>
Konfiguration Apache 2.4: Anwendung (komplett)
- httpd.conf
<Location /LAZYAPPLICATION> #Lazy Session Shibboleth authType shibboleth ShibRequestSetting requireSession false Require shibboleth 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] #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! RewriteCond ${shibchecker:lazy,%{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] #Login? - das redirect muss automatisch erfolgen, da sonst ein Nutzer die Möglichkeit hätte, ein altes Cookie #der Anwendung einzuschleusen und durch den sessionHook und den erneuten Aufruf von shibchecker wird sonst #eine Anwendungs-Session gefunden, die dann zum Logout führt RewriteCond %{ENV:shibcheckertype} ^doLogin$ RewriteRule .* https://sp.beispiel-uni.de/LOGINLAZY #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>
Anmerkung:
Führt die Anwendung selbständig das Redirect zum Shibboleth-Login und auch die Initialisierung der Anwendungssession durch, so verkürzt sich die Konfiguration, da auf die Rückgabewerte doLogin und doAppSession nicht reagiert werden muss.
Konfiguration Apache 2.4: Anwendung (reduziert)
- httpd.conf
<Location /LAZYAPPLICATION> #Lazy Session Shibboleth authType shibboleth ShibRequestSetting requireSession false Require shibboleth 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] #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! RewriteCond ${shibchecker:lazy,%{HTTP:Shib-Session-ID},APPSESSIONNAME,%{HTTP:Cookie}} ^doLogout$ RewriteRule .* https://sp.beispiel-uni.de/Path/To/remsess.php?appsid=%{ENV:appsid} </Location>