单点登录模式

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

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

相关推荐
侠客行03173 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪3 小时前
深入浅出LangChain4J
java·langchain·llm
子兮曰3 小时前
OpenClaw入门:从零开始搭建你的私有化AI助手
前端·架构·github
吴仰晖3 小时前
使用github copliot chat的源码学习之Chromium Compositor
前端
1024小神3 小时前
github发布pages的几种状态记录
前端
较劲男子汉5 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
老毛肚5 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
wypywyp5 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
风流倜傥唐伯虎5 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Doro再努力5 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim