IsPassive

Innen: KIFÜ Wiki
A lap korábbi változatát látod, amilyen Sitya(AT)niif.hu (vitalap | szerkesztései) 2009. február 4., 16:03-kor történt szerkesztése után volt.

Az isPassive SAML2-ben bevezetett lehetőség, mellyel utasíthatjuk az alkalmazást, hogy semmiféle látható felhasználói interakciót ne engedélyezzen az IdP-vel.


Miért jó?

Az isPassive használatával elérhetjük, hogy lazy session-nel védett oldalunkra a felhasználó bejelentkezése automatikusan megtörténjen. Ehhez két feltétel együttes teljesülése szükséges

  • a felhasználó már rendelkezik az IdP-je által hitelesített munkamenettel
  • a Discovery Service képes a felhasználót hitelesítő IdP-vel háttérben kommunikálni, s a felhasználóról érdeklődni

Amennyiben ezen feltételek közül legalább az egyik nem teljesül, úgy az SP hibát fog dobni. Ezt oly módon kell lekezelnünk, hogy a redirectErrors attribútum lehetőségét kihasználva megadjuk, hogy Shibboleth hiba esetén melyik oldalra dobjon át minket a rendszer.


Működése a gyakorlatban

  • Az alábbi szkriptet szúrjuk be az oldalunk főlapjára / fejlécébe.
  • A Shibboleth SP konfigurációjában (shibboleth2.xml) az adott alkalmazásra vonatkozó beállításoknál új attribútumként adjuk meg a redirectErrors="SAJÁT KEZDŐLAPOM" direktívát.
  • Bizonyosodjunk meg róla, hogy az oldalt lazy session-nel védjük


A BESZÚRANDÓ JAVASCRIPT

<!-- START: isPassive script-->
<script type="text/javascript" language="javascript">
<!--
// Written by Lukas Haemmerle <lukas.haemmerle@switch.ch>, SWITCH

// Check for session cookie that contains the initial location
if(document.cookie && document.cookie.search(/_check_is_passive=/) >= 0){
	// If we have the opensaml::FatalProfileException GET arguments
	// redirect to initial location because isPassive failed
	if (
		window.location.search.search(/errorType/) >= 0
		&& window.location.search.search(/RelayState/) >= 0
		&& window.location.search.search(/requestURL/) >= 0
	) {
		var startpos = (document.cookie.indexOf('_check_is_passive=')+18);
		var endpos = document.cookie.indexOf(';', startpos);
		window.location = document.cookie.substring(startpos,endpos);
	}
} else {
	// Mark browser as being isPassive checked
	document.cookie = "_check_is_passive=" + window.location;

	// Redirect to Shibboleth handler
	window.location = "/Shibboleth.sso/DS?isPassive=true&target=" + encodeURIComponent(window.location);
}

</script>
<!-- END: isPassive script-->