单点登录模式

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 就是失效的,就访问不了子系统了。

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

相关推荐
2601_963869956 分钟前
【计算机毕业设计】基于Java的相框定制系统的设计与实现
java·开发语言·课程设计
basketball6166 分钟前
软考中级网络工程师 第4章 无线通信网 备考总结
linux·服务器·网络·网络工程师·软考
王林不想说话22 分钟前
ES6 到 ES2026 全面进阶指南:新特性、原理、示例与工程落地
前端·javascript·面试
用户435237138149325 分钟前
🚀 Vue3 + TypeScript 学习笔记:从泛型 T 到 Promise<T>,终于搞懂了 keyof 和 typeof
前端
yunlaodacom25 分钟前
阿里云国际站注册:性能损耗 < 1%!基于 eBPF 的服务器异常预测实战与调优指南
大数据·服务器·阿里云
跟着群主去吃肉26 分钟前
Cinemachine的应用-第三人称视角
前端·unity3d·游戏开发
东方小月26 分钟前
从零开发一个 Coding Agent(十):实现 CLI 参数解析与静态命令
前端·人工智能·开源
阿黎梨梨27 分钟前
Next.js 全栈开发:从 SPA 的痛点到 SSR 的破局之道
前端·后端
沐道PHP28 分钟前
CRMEB多店版diy装修位置偏移修复
前端
犀利的毛豆豆35 分钟前
useCallback
前端