Abbiamo appena discusso del comportamento di accesso e disconnessione quando si utilizza OAuth 2. Supponiamo di avere due webapp A
e B
utilizzando un provider OAuth O
(creato utilizzando lo stack spring-security-oauth2).Single sign off con OAuth 2
Quando si desidera eseguire il login per A
si ottiene reindirizzato a O
, immettere le credenziali, ottenere una sessione lì O
, reindirizzato ad A
con un token di accesso e una sessione viene creato sul A
pure.
Ora, quando si desidera eseguire il login per B
si ottiene reindirizzato a O
, arrivare direttamente rimandati con un token a B perché avete ancora un sesison valido O
e una sessione viene creato B
così (senza dover inserire le tue credenziali di nuovo).
Questo risolve il nostro unico segnale sul problema.
Un requisito è ora, che quando logout da A
oB
si è connessi fuori sempre da entrambi/tutte le applicazioni (single sign off).
La nostra idea è:
- valorizzare il token di accesso con l'attuale id di sessione
- Se app
A
oB
vogliono disconnettere un utente, lo reindirizzamento alla pagina di logout diO
- Se l'utente viene disconnesso da
O
, tutti i token di accesso appartenenti alla sessione corrente suO
vengono rimossi e l'utente viene reindirizzato aA
oB
- La sessione sulla
A
oB
viene distrutta A
eB
controllo per la validità della loro token di accesso OAuth su ogni richiesta e distruggere la loro sessione se il token non è più valida
Queste è un caso d'uso valido per OAuth 2? Come implementeresti il single sign off in modo diverso?
OpenID ha recentemente aggiunto due nuove specifiche relative al single sign-out: http://openid.net/specs/openid-connect-logout-1_0.html e http://openid.net/specs/openid-connect-backchannel -1_0.html Questi sono molto più facili da gestire quindi l'approccio di gestione delle sessioni di OpenID connect. – James
Ciao James, abbiamo requisiti simili, vorremmo sentirti. sei andato con questo approccio o hai trovato qualche altra soluzione migliore? – Sameer
Poiché al momento eseguiamo tutte le applicazioni nello stesso dominio, ora utilizziamo un cookie condiviso per condividere la sessione e gestire il single sign off. Il provider OAuth ha anche un endpoint/end_session che può essere richiamato dalle app per eseguire correttamente il logout. Per prevenire gli attacchi CSRF, l'endpoint end_session richiede un token JWT firmato valido passato come parametro di query. – James