ele*_*ype 9 authentication single-sign-on jwt openid-connect
我试图了解如何使用Json Web Tokens在单点登录架构中实现注销功能.
假设我们有:
example1.comexample2.comauthserver.com当用户必须进行身份验证时example1.com,会将authserver.com其重定向到验证用户凭据,创建已签名的JWT令牌并example1.com使用此令牌将用户重定向回.example1.com然后将设置一个cookie(或LocalStorage密钥),并且example1.com只要该令牌未过期,就会对用户进行身份验证.无需更多呼叫即可authserver.com识别用户.
然后用户前往example2.com参与SSO体系结构.用户也需要在那里进行身份验证,因此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令牌不再有效?
或者,您也可以在没有openid的情况下实现跨域SSO,仅在客户端使用JWT,例如google web apps.
优点是您无需将用户重定向到服务器以了解用户是否已登录.可以在选项卡之间自动同步Logout和JWT更改.
在Authserver.com将JWT返回到example1之后,将其存储在localStorage中,但通过iframe使用中间域sso.example.com.在example1和example2中包含此iframe(指向sso.example.com).iframe将读取JWT并向包含令牌的页面发送消息.
当用户注销或更改活动用户时,iframe也可以向父级发送消息,因此您可以同步所有站点(如果需要)
CORS没问题,因为sso.example.com可以访问其localStorage.如果识别出原点和目的地,则允许iframe之间的通信(请参阅http://blog.teamtreehouse.com/cross-domain-messaging-with-postmessage)
为了简化开发,我们最近发布了一个带有JWT的跨域SSO,网址为https://github.com/Aralink/ssojwt
将您的问题总结为此架构1)在localStorage中清理JWT并发送javascript事件2)听取事件并决定做什么
1) https://openid.net/specs/openid-connect-session-1_0.html#RPLogout是一种规范(对于不同的策略还有其他规范),也可以退出 authserver。它定义了end_session_endpoint您的 example1.com 将重定向到的;请注意,authserver 将用户注销并可以重定向回 RP 的post_logout_redirect_uri.
2)我认为这取决于你想要它做什么。您可能不想终止 example2.com 会话,在这种情况下 example2.com 会继续。example2.com 的 JWT 仍然有效。如果您想注销所有客户端,这有点复杂,但可能。在我的项目中,我们想要注销一个客户端和 authserver。
| 归档时间: |
|
| 查看次数: |
3349 次 |
| 最近记录: |