Authentication 如何在基于JWT的单点登录认证体系结构中实现注销?
我试图理解如何使用Json Web令牌在单点登录体系结构中实现注销功能 假设我们有:Authentication 如何在基于JWT的单点登录认证体系结构中实现注销?,authentication,single-sign-on,jwt,openid-connect,Authentication,Single Sign On,Jwt,Openid Connect,我试图理解如何使用Json Web令牌在单点登录体系结构中实现注销功能 假设我们有: example1.com example2.com authserver.com 当用户必须在example1.com上进行身份验证时,他将被重定向到authserver.com,这将验证用户凭据,创建签名JWT令牌,并使用此令牌将用户重定向回example1.comexample1.com然后将设置cookie(或本地存储密钥),只要令牌未过期,用户将在example1.com上进行身份验证。不需要再调用
example1.com
example2.com
authserver.com
example1.com
上进行身份验证时,他将被重定向到authserver.com
,这将验证用户凭据,创建签名JWT令牌,并使用此令牌将用户重定向回example1.com
example1.com
然后将设置cookie(或本地存储密钥),只要令牌未过期,用户将在example1.com
上进行身份验证。不需要再调用authserver.com
来识别用户
然后,用户转到参与SSO体系结构的example2.com
。用户也需要在那里进行身份验证,因此example2.com
还会将用户重定向到authserver.com
,该站点会识别用户(使用首次设置的cookie),创建新的JWT令牌并自动将用户重定向回example2.com
example2.com
然后将设置cookie(或本地存储密钥),只要令牌未过期,用户将在example2.com
上进行身份验证。不需要再调用authserver.com
来识别用户
现在,如何实现“注销”功能
如果用户在example1.com
上注销,则example1.com
上的JWT令牌将被删除,用户不应再在那里进行身份验证。但一旦他试图到达受保护区域,example1.com
会将他重定向到authserver.com
,用户将被识别并自动再次登录。。。即使他刚刚注销
问题1)所以我猜当用户注销example1.com
时,必须调用authserver.com
删除authserver.com
设置的cookie,这样用户就不会再自动登录了
问题2)如果是,那么example2.com
呢?用户是否仍应在那里进行身份验证?如果不是,建议的流程是什么,以便example2.com
知道它为用户提供的JWT令牌不再有效?1)是一个用于注销authserver的规范(对于不同的策略还有其他规范)。它定义了example1.com将重定向到的end\u session\u endpoint
;请注意,authserver将用户注销,并可以重定向回RP的post\u logout\u redirect\u uri
2) 我认为这取决于你想要它做什么。您可能不想终止example2.com会话,在这种情况下example2.com将继续。JWT对于example2.com仍然有效。如果你想注销你所有的客户,这有点复杂,但也有可能。在我的项目中,我们希望注销一个客户端和authserver。或者,您也可以在不使用openid的情况下实现跨域SSO,只在客户端使用JWT,如google web apps 优点是不需要将用户重定向到服务器就可以知道用户是否已登录。注销和JWT更改可以在选项卡之间自动同步 Authserver.com将JWT返回给example1后,将其存储在localStorage中,但通过iframe使用中间域sso.example.com。在示例1和示例2中包括这个iframe(指向sso.example.com)。iframe将读取JWT并向包含令牌的页面发送消息 当用户注销或更改活动用户时,iframe还可以向家长发送消息,以便您可以同步所有站点(如果需要) CORS没有问题,因为sso.example.com可以访问其本地存储。如果识别出起点和终点,则允许iFrame之间进行通信(请参阅) 为了简化开发,我们最近发布了一个跨域SSO,JWT位于 将您的问题总结为此架构 1) 清除localStorage中的JWT并发送javascript事件
2) 聆听活动并决定做什么非常有趣,谢谢!但我不确定用户注销时为什么要重定向到OP。。。我想不出有什么真实的案例发生在我身上。当我点击“注销”链接时,我想直接注销,而不是重定向到另一个站点以确认操作!此外,即使用户被重定向到OP并确认他想要注销,他仍可能在另一个站点上通过身份验证,例如,
example2.com
。在我看来,结果有点奇怪。如果example2.com
知道它的令牌不再有效,那么这个流程是有意义的。我想知道后端服务器example1.com
是否可能有问题,通过传递JWT令牌来清除OP上的会话,自己调用end\u session\u endpoint
。。。因此,不需要将用户重定向到那里。我遗漏了什么重要的东西吗?在一个OP实现中,IdentityServer3()重定向只会在您同时提供JTW和注销后重定向uri的情况下立即将您重定向回客户端。如果一切正常,您甚至都看不到OP。还有其他规范可以做类似的事情(事实上,IdentityServer3昨天刚刚实现了另一个:)但诀窍是,OP上的浏览器cookie需要清除…我想不出如果不在OP上,你会怎么做)我猜对OP的后端调用可能会使与用户cookie关联的“会话”无效,因此此cookie在不被删除的情况下不再有效。但我同意,如果它是一个快速重定向/重定向回,它是好的。我问是因为