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>
  • Zuletzt geändert: vor 4 Jahren