前言:
你是否看到后台大神的单点登录示意图头皮发麻;你是否看完了单点登录的整个流程后,隔一段时间就浑然不知;你是否为单点登录的跳来跳去的验证感到苦恼;你是否对单点登录相关的技术术语感到语云里雾里。本文将从单点登录的基本的问题出发,展开讨论单点登录的朴素原理。
1、什么是登录
从业务场景出发,假设一个用户去购物网站购买东西,首先需要登录,然后将自己想买的物品添加到购物车,进行结算付款,这是大家都熟知的操作
但站在技术实现角度来看,其实就是怎样利用现有的计算机技术完成上述操作:一般采取前端—http—>后台的方式进行,也就是前端进行ui界面的展现,用户的登录、添加购物车、结算等都需要通过http协议与后台通信,后台存储该用户的对应商品数据及个人信息。这其中的http通信很重要,存在的问题是http是无状态的,意思就是每次的http请求都相互独立,互不影响,对服务器来说他不清楚过来的请求是谁?也就是无记忆的。登录请求和添加物品到购物车是独立的两个请求,添加物品到购物车的请求必须携带用户的个人信息,从安全的角度来说,需要一个用户标示,所以服务端需要一个标示来记录用户是否登录,并返回给前端储存,从而让后续的请求主动带上该标示,后台就能准确识别该用户
2、什么是单点登录
仍就从业务场景出发,上面是针对单个系统而言,如果是多个系统呢,由于系统之间的数据一般是相对隔离的,系统之间跳转仍需要登录,这样的话势必影响用户体验,比如购物网站嵌入了其他系统商品的链接,如何能直接跳转过去呢
我们开始分析,之前的单系统是多个http请求到后台,通过给第一个登录请求返回标示,后续的请求都带有该表示来维护登录状态的。现在的问题是,多个http请求,第一个登录请求已经登录成功,返回了标示,后续的http请求是到了另一个后台,如何延续这种状态呢?这个问题能不能转化为第一个问题呢?显然是可以的,二者都是多个http请求,只是http请求的目的地也就是服务器不同,但是如果两个服务器打通,那么问题就转化为了第一个问题,也就得到解决,显然,服务器之间是可以进行通信打通的。
具体实现上就是:拿到之前用户登录认证后得到的标示,再请求后台,后台去之前的系统去验证用户是否登录,如果已经登录,则返回用户信息到自己的业务后台,然后生成新的标示返回给前端,后续该系统的其他请求携带该标示到自己的后台,就不用每次都去之前的系统后台进行校验。
3、单点登录示意图
单点登录示意图如下:多个http请求通过token标示的方式维护是否登录的逻辑关系,进而达到在单个系统内部,甚至多个系统间的登录状态维护,后续待完善的部分是:A系统中的认证部分可以单独拿出来作为一个独立认证系统
![](https://i-blog.csdnimg.cn/blog_migrate/d233d491812cd387682e9172f2336a4a.png)