前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于spring security auth2 +jwt的sso单点登录背景

基于spring security auth2 +jwt的sso单点登录背景

原创
作者头像
ruochen
修改2021-11-23 13:42:37
3580
修改2021-11-23 13:42:37
举报

1.访问资源接口:前端判断是否带token。

2.没有token,调用CRM代理的授权接口并带上系统标识(区分客户端用)

3.CRM代理的授权接口进行转发到uaa前端的授权页

4.uaa前端授权页调用uaa的代理授权接口。

5.uaa后端验证未登录,重定向到uaa登录页并带上系统标识。

6.输入账号和密码。

7.调用登录接口。

8.登录成功以后,由前端调用uaa的代理授权接口并带上系统标识。

9.授权成功后跳转到crm的授权码页面。

10.前端在授权码页拿到code,调用crm的代理获取token接口(crm系统的代理获取token接口直接调uaa的token接口)。

11.返回token,crm前端拿token访问资源。

已登录系统2.png

1.访问资源接口:前端判断是否带token。

2.没有token,调用CRM代理的授权接口并带上系统标识(区分客户端用)。

3.CRM代理的授权接口进行转发到uaa前端的授权页。

4.uaa前端授权页调用uaa的代理授权接口。

5.uaa后端验证已登录,跳转到cms的授权码页面。

6.前端在授权码页拿到code,调用crm的代理获取token接口(crm系统的代理获取token接口直接调uaa的token接口)

7.返回token,crm前端拿token访问资源。

刷新token.png

filter组成.png

从调用上来看,针对不同的请求,security-

oauth2对应的filter是不一样的。代码入口FilterChainProxy.doFilterInternal.

获取token、token_key等接口时会把Client_id和Client_secret做为身份信息去调用,其他的接口则必须走用户校验,所以两者是有区别的。

所以需要保证,授权的时候,session必须一致,这样才能拿到登录了的身份信息,所以流程里面只要是授权都要调到uaa前端统一去调用,以保证uaa后端能够根据sessionId拿到已登录的身份信息。

到此为止,统一登录的问题已解决。

接下来是解决统一登出的问题:

我采用的方案是:

1.登录成功后,将login:user_id作为key,时间戳作为值放入缓存中,在获取token的时候,从缓存中拿到值,放到jwt中。

2.资源服务器在解析token的时候,拿到token的附加信息loginVersion,然后将loginVersion与缓存中的值比较,不一致说明,已退出登录。

3.推出登录时将缓存的信息移除

demo地址(前后分离,包含前端代码):[https://github.com/mushang8923/sso-

jwt.git](https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Fmushang8923%2Fsso-

jwt.git)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档