Dies ist eine alte Version des Dokuments!


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:

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/eviluse/SESSIONREMOVER.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">
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/initsess/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/eviluse/SESSIONREMOVER.php?appsid=%{ENV:appsid}
</Location>
  • Zuletzt geändert: vor 8 Jahren