当前位置: 首页 > 知识库问答 >
问题:

如何在基于JWT的单点登录认证体系结构中实现注销?

慕容光启
2023-03-14

我试图了解如何使用Json Web令牌在单点登录架构中实现注销特性。

假设我们有:

  • example1.com
  • example2.com
  • authserver.com

当用户必须在example1.com上进行身份验证时,他将被重定向到authserver.com,后者将验证用户凭据,创建一个签名的JWT令牌,并使用该令牌将用户重定向回example1.comexample1.com将设置一个cookie(或LocalStorage密钥),用户将在example1.com上进行身份验证,只要该令牌没有过期。不再需要调用authserver.com来识别用户。

然后,用户转到参与SSO体系结构的example2.com。用户也需要在那里进行身份验证,因此example2.com还将用户重定向到authserver.com,后者会识别用户(使用它第一次设置的cookie),创建一个新的JWT令牌,并自动将用户重定向回example2.comexample2.com将设置一个cookie(或LocalStorage密钥),用户将在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个答案

左丘成天
2023-03-14

或者,您也可以实现一个没有openid的跨域SSO,只在客户端使用JWT,就像google web apps一样。

这样做的好处是,您不需要将用户重定向到服务器来知道用户是否登录。注销和JWT更改可以在选项卡之间自动同步。

在AuthServer.com将JWT返回给example1之后,将其存储在localStorage中,但是通过iframe使用中间域sso.example.com。在example1和example2中包含这个iframe(指向sso.example.com)。iframe将读取JWT并向包含令牌的页面发送消息。

当用户注销或更改活动用户时,iframe还可以向父级发送消息,这样您就可以同步所有站点(如果需要的话)

CORS没有问题,因为sso.example.com可以访问其本地存储。并且,如果能够识别源和目的地,则允许iframes之间的通信(请参见http://blog.teamtreehouse.com/cross-domain-messaging-with-postmessage)

为了简化开发,我们最近在https://github.com/aralink/ssojwt发布了一个带有JWT的跨域SSO

将您的问题总结为这个体系结构(1)清理localStorage中的JWT并发送一个javascript事件(2)监听事件并决定做什么

 类似资料:
  • 我很乐意听到其他的想法。如果一个特定的PaaS(比如Heroku)有一个专有的解决方案,那么这个解决方案也是可以接受的。

  • 本文向大家介绍基于JWT实现SSO单点登录流程图解,包括了基于JWT实现SSO单点登录流程图解的使用技巧和注意事项,需要的朋友参考一下   一、基于JWT实现SSO单点登录原理   1、什么是单点登录   所谓单点登录就是有多个应用部署在不同的服务器上,只需登录一次就可以互相访问不同服务器上的资源。   2、单点登录流程   当一个访问请求发给应用A,如果这个请求需要登录以后才能访问,那么应用A就

  • 我们在 remember-me-hash上,基于 Form 表单的方式,来实现基于散列的令牌方法的 Remember-Me 认证,我们新建一个 jwt-authentication项目。 build.gradle 修改 build.gradle 文件,让我们的remember-me-hash项目成为一个新的项目。 修改内容也比较简单,修改项目名称及版本即可。 jar { baseName

  • 我已经阅读了一些关于keydove-spring实现的文章(例如:使用keydove轻松保护您的Spring Boot应用程序),但没有人提到如何使用JWT。 我已经创建了zuul api网关,并添加了KeyCloak适配器,如前面链接的文章所述。没关系,但是我想用JWT和钥匙斗篷。 如前所述,将客户端访问类型设置为仅承载,将会话策略设置为NullAuthenticatedSessionStrat

  • 我正在尝试为自己构建一个仪表板,为我使用的一些应用程序提供基于SAML的身份验证。 从我作为测试平台构建的: 我正在使用一个登录名作为我要使用的应用程序的身份提供者。 举个例子:对于Netflix,我被重新路由到Netflix页面,我的用户ID和密码被预先填入其中,就像密码管理器的工作方式一样。(它使用OneLogin的扩展名) Netflix是否允许基于SAML的单点登录身份验证?我无法从谷歌搜

  • 本文向大家介绍springboot+jwt实现token登陆权限认证的实现,包括了springboot+jwt实现token登陆权限认证的实现的使用技巧和注意事项,需要的朋友参考一下 一 前言 此篇文章的内容也是学习不久,终于到周末有时间码一篇文章分享知识追寻者的粉丝们,学完本篇文章,读者将对token类的登陆认证流程有个全面的了解,可以动态搭建自己的登陆认证过程;对小项目而已是个轻量级的认证机制