单点登录模式

1. 什么是单点登录

比如有一家公司,他业务线很多,有小游戏,有商城,有小程序,导致有很多系统,他不可能为每一个系统做一套用户管理,因为这些系统都是属于公司的,用户是相通的,他就会把用户系统抽离出来,形成一个认证中心。用户要登录,注册,修改用户信息都到这个认证中心来,专门来管理用户的。用户对自身的所有操作都在一个点,这就叫单点。这些用户需要做的登录,就是单点登录。

2. 怎么实现单点登录

实现单点登录的模式有 Session + Cookie、TOKEN、TOEKN + RFRESHTOKEN 这三种。

实现步骤:1. 用户到认证中心登录,认证中心有一个 Session 表,记录键值对,键是 sid,值是用户信息。登录成功往这个表记录一条键值对。只要 Session 表格有这个记录,证明登录成功。2. 把 sid 用 Cookie 给用户返回。用户访问子系统时把 sid 带给子系统。3. 子系统根据 sid 判断有没有登录,但是子系统判断不了,他没有 Session 表格,就需要发给认证中心,让认证中心判断。4. 认证中心去 Session 表查 sid,查到了,就是登录,没查到,就是没登陆,或者登录过期的。这就是 Session + Cookie 模式。

优点:认证中心有很强的控制力,比如用户有违规操作,我们要让他下线,直接从 Session 表格里把他删了,子系统再拿 sid 来查,就是查不到的,就需要通知用户重新登录,如果在加上黑名单控制,直接用户就是登录不了了。很多大厂要保证对用户的绝对控制,就是这种模式。

缺点:但是这种模式有个缺点,就是烧钱。用户量大的应用,同时在线几千万人,上亿人,认证中心的压力就很大,各种子系统发给他认证,表格也会变得非常大,还要做 Session 集群。认证中心挂了,所有系统都要完蛋,还得做容灾。

2.2 Token 模式

实现步骤:1. 用户去认证中心登录,登录成功后,不再向 Session 表插入键值对,生成一个不能被篡改的字符串作为 token 发给用户,token 格式一般是 JWT。2. token 发给用户后,用户就存起来,接下来后,认证中心就不管了,用户访问子系统就携带这个 token,子系统自行认证 token。

优点:便宜,认证中心压力小。

缺点:失去了对用户的控制。比如有一天,你希望一个用户下线,咋办,你最多只能让他不能再登录了,但是你之前发给他的 token 还是有效的,仍然是可以向子系统发送请求的。这时你必须去通知子系统,不能让他访问了,一个子系统还好,如果有很多,就会很麻烦。

2.3 Token + RfreshToken 双 token 模式

实现步骤:1. 用户在认证中心登录,登录成功后,认证中心给他两个 token,一个是所有子系统都可以自行认证的 token,另一个是只有认证中心才认识的 token,叫刷新 token,两个 token 都存起来。但是第一个 token 过期时间非常非常短,比如 10 分钟,而第二个 token 过期时间就长一点,一个月。2. 用户在请求子系统时,带第一个 token,去认证,有效就可以用。3. 如果 token 失效了,我们还有一个刷新 token,带着刷新 token 去访问认证中心,然后认证中心再给你一个 token,再用这个新 token 去请求子系统。

这个模式的意义:要让用户每隔一小段时间来一次,这个作用是方便我们控制,比如我们要让一个用户下线,虽然我们没办法让他立即下线,但是过一会他要来请求新 token,我们不给了,那他的 token 就是失效的,就访问不了子系统了。

优点:便宜,还能对用户有较强的控制力。

相关推荐
deli0079 分钟前
手机20%突然关机?电量百分比是估的,SOC曲线4组实测
前端
apcipot_rain2 小时前
C++转Java日记(06)
java·开发语言
金銀銅鐵6 小时前
带您看懂字节码指令(一):一帧里有什么
java·后端·ai编程
nice_lcj5208 小时前
【从零理解 Spring AI · 14】RAG 的四个环节:加载、切分、向量化、检索
java·spring boot·embedding·向量数据库·rag·spring ai·ai应用开发
lzx_0029 小时前
Linux 进程(三) 从进程状态到僵尸进程、孤儿进程
linux·服务器
学长毕设10 小时前
基于springboot科创竞赛信息平台-附源码
java·spring boot·后端
聪明的笨猪猪10 小时前
Java 工程案例:AI 生成 @Async 异步线程池踩坑
java·经验分享·面试·ai编程
深蓝AI11 小时前
Meta 开源用了八年的设计系统 astryx:连坐两天 GitHub 总榜第一,组件库开始写给 agent 的说明书
前端·人工智能
学长毕设11 小时前
基于SpringBoot公务员考试交流平台-附源码
java·spring boot·后端
IT_陈寒11 小时前
Vue的watch把我坑惨了,原来要这样用才靠谱
前端·人工智能·后端