简介
单点登录相对的是多点登录,每个网站拥有自己的账号、密码数据,各个网站的登录互不认可,需要用户登录各个系统,不同厂家这种情况尚可,但对于同一厂家的不同产品,对用户就不太友好了,也不利于分析各个用户的行为。
单点登录就是为了将不同网站的用户信息统一到一起,统一认证与鉴权,如下图所示:
这样用户在一个网站做了登录,就可以访问其他网站了。参考
单系统认证流程
在进一步研究单点登录之前,现在回顾一下以前微服务中的认证方式。
我们有多个业务服务,还有专门的鉴权服务,其流程图如下所示(图参考):
这种方式可以看做简版的单点登录,多个服务共享认证中心。这里的客户端一般都是一个网站,对于多个网站的情况其结构类似,流程上稍有不同。
多系统单点登录
流程
单点登录的流程设计参照了OAuth2模型,它是为了使 第三方应用(client)访问的资源而设计的一套授权模型,稍后再对它进行解析。
首次登录的流程如下:
-
用户访问网站1
-
网站1客户端重定向到鉴权中心后端
-
鉴权中心发现用户没有登录,重定向到鉴权中心客户端
-
鉴权中心客户端要求用户输入账号、密码
-
客户端将信息传递给鉴权中心后端
-
鉴权中心进行验证,生成Authorization Code,重定向到网站1客户端(携带Authorization Code)
-
网站1客户端将Authorization Code传递给网站1后端
-
网站1后端拿着Authorization Code找鉴权中心check
-
鉴权中心确定后返回给网站1
-
网站1后端生成自己的token返回给网站1客户端
再次登录的流程如下:
- 用户登录网站2客户端
- 网站2客户端重定向到鉴权中心后端,这时候会携带网站中心的code
- 鉴权中心发现用户已经登录,直接返回Authorization Code
- 网站2客户端将Authorization Code传递给后端
- 后端再找鉴权中心check
- 鉴权中心通过
- 网站2后端生成自己的token发放给网站2客户端
问答
这里有点疑问:
-
第2步中,浏览器是如何携带该code的?
可以在第一次的第6步中,将辨识信息传递浏览器,域名配置到根域名上
那么重定向时,可以设置cookie吗
如果不能,就需要第首次登录的时候第5步,先返回给前端,这时候可以设置cookie,再重定向到其他系统。
具体这块,需要在试验中去完成
时序
又搜索了一下单点登录,阿里云社区给出的这篇文章,更清晰的说明了这个过程,果然是相同域名下的用cookie,不同域名下先返给鉴权中心的前端,其时序图如下:
参考