Inhaltsverzeichnis

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>