我想了解如何在使用Json Web令牌的單點登錄體系結構中實現註銷功能。如何在基於JWT的單點登錄身份驗證體系結構中實現註銷?
比方說,我們有:
example1.com
example2.com
authserver.com
當用戶有對example1.com
認證,他將被重定向到authserver.com
這驗證用戶憑證,創建一個簽名的JWT令牌並將用戶重定向迴帶有此標記的。 example1.com
將設置一個cookie(或LocalStorage密鑰),並且只要令牌未過期,用戶將在example1.com
上進行身份驗證。不需要致電authserver.com
來識別用戶。
然後用戶轉到參與SSO體系結構的example2.com
。用戶需要在那裏進行身份驗證,因此example2.com
也會將用戶重定向到authserver.com
,該用戶可以識別用戶(使用它首次設置的cookie),創建新的JWT令牌並自動將用戶重定向回example2.com
。然後example2.com
將設置一個cookie(或一個LocalStorage密鑰),並且只要令牌未過期,用戶將在example2.com
上進行認證。不需要致電authserver.com
來識別用戶。
現在,如何實現「註銷」功能?
如果用戶在example1.com
上註銷,example1.com
上的JWT令牌將被刪除,用戶不應該在那裏進行身份驗證。但只要他試圖到達保護區,example1.com
將把他重定向到authserver.com
,用戶將被識別並自動再次登錄...即使他剛剛註銷!
Quetion 1)所以我想,當用戶在example1.com
註銷,以authserver.com
呼叫必須做刪除的cookie被authserver.com
設置,使用戶不會被記錄自動了嗎?
排隊2)如果是這樣,example2.com
怎麼辦?用戶是否仍然在那裏進行身份驗證?如果不是,建議的流程是什麼,所以example2.com
知道它爲用戶提供的JWT令牌不再有效?
非常有趣,謝謝!但我不確定爲什麼用戶應該在他退出時重定向到OP ...我無法想象出現這種情況的真實情況。當我點擊「註銷」鏈接時,我希望直接註銷,而不是重定向到其他站點以確認操作!另外,即使用戶被重定向到OP並確認他想註銷,他仍然可以在另一個站點「example2.com」上進行身份驗證,例如。所以結果有點奇怪,在我看來。但是,如果有'example2.com'知道它的標記無效的方法,那麼這個流程是有意義的。 – electrotype
我想知道後端服務器'example1.com'是否可能會在OP *自身*上調用'end_session_endpoint'的問題,通過傳遞JWT令牌來清除會話...因此,不需要讓用戶在那裏重新定向。我錯過重要的東西嗎? – electrotype
一個OP實現IdentityServer3(https://identityserver.github.io/Documentation/docsv2/endpoints/endSession.html)將重定向僅在您提供JTW和post_logout_redirect_uri時立即將您重定向回客戶端。如果一切正常,你甚至看不到OP。還有其他的規格可以做類似的事情(實際上IdentityServer3昨天剛剛實現了另一個:http://openid.net/specs/openid-connect-logout-1_0.html),但訣竅是OP上的瀏覽器cookie需要被清除......我想不出如何做到這一點,而不在OP上) – sdoxsee