K7 / EOSC Keycloak <-> IdP podporující SLO / nefunkční odhlášení
Opened this issue · 1 comments
Zdravím,
při nasazení K7 spolu s EOSC
Keycloakem a připojením do federace eduID.cz
se při pokusu o odhlašování vyskytuje následující chyba u některých IdP (jako příklad KNAV, i všechno níže - nemám možnost testovat jinde v jiné doméně):
Zkoumáním a testováním jsem dospěl ke zjištění, že problém nastává zřejmě u Shibboleth IdP, které ve svých metadatech propagují endpointy pro odhlašování (SLO), příklad:
Chyba při odhlašování je propagována uživateli (do prohlížeče, viz první screenshot) v případě, že je v konfiguraci Keycloaku u příslušného IdP nastaven přepínač [Backchannel logout]
na off
, příklad:
Pokud se přepínač nastaví na on
, tak chyba uživateli není propagována, z jeho pohledu na popředí proběhne zdánlivě korektní odhlášení, a je vrácen zpět do K7 jako odhlášený.
Nicméně na pozadí problém samozřejmě přetrvává - hlavně ten, že není zneplatněna uživatelská session u jeho domovského IdP, takže pokud se uživatel vrátí v relativně krátké době zpět na K7 (ale ne jen K7 samozřejmě, ale i případně jinou aplikaci využívající SAML2 v rámci podporované federace), tak je do aplikace přihlášen bez vyžádání jména a hesla.
Myslím, že asi není potřeba sáhodlouze rozebírat, že to je problematické / riziko jak pro správce chráněné služby (SP), tak pro poskytovatele identity (IdP), zvláště v případě, že na daném uživatelském stroji se střídá více lidí a nezavírají po sobě okna v prohlížeči. Různé služby mohou poskytovat různé, třeba i hodně, citlivé informace, které by tak mohly uniknout kam nemají.
Na druhou stranu - namátkovou analýzou metadat federace eduID.cz
, týkajících se IdP, jsem zjistil, že část z nich odhlašování vůbec nepodporuje (nepropaguje SLO endpointy). Evidentně výše zmíněné riziko asi dost organizací nevzrušuje, nevím.
Zpátky k optickému (ne)vyřešení problému s odhlášením - spočívá v tom, nastavit výše zmíněný přepínač u daného IdP na on
.
Další komplikace bohužel spočívá v tom, že u EOSC klonu Keycloaku nelze toto uskutečnit globálně na úrovni konfigurace federace, ale opravdu až u konkrétního IdP, takže ručně lovit Shibboleth IdP (pokud se to týká jen jich, nemám možnost ověřit jinde, např. implementací pod php) které podporují SLO, a tam zapnout odhlašování na pozadí.
Aktuálně netuším, zda-li by šlo nějak naskriptovat aktivaci odhlašování na pozadí a pak to přes REST-API Keycloaku hromadně změnit. Ale dovedu si to představit.
Nicméně optimálním řešením by bylo rozchodit validní odhlášení spojené se zneplatněním uživatelské session u jeho domovského IdP.
Tady je ještě pro ilustraci chyba, kterou vyhazuje Shibboleth IdP, když mu přijde požadavek na odhlášení na SLO endpoint:
Dál jsem se zatím nedostal, navíc ta chybová hláška je dost stručná a ne zrovna navádějící k něčemu konkrétnímu (no je pravda, že nejsem totální expert na SAML2 a jeho konkrétní implementaci v podobě Shibboleth IdP).
MD
Ahoj, dali byste mi prosím nějaký testovací účet, abych to vyzkoušel a popřípadě opravil?