单点登录

简介

单点登录相对的是多点登录,每个网站拥有自己的账号、密码数据,各个网站的登录互不认可,需要用户登录各个系统,不同厂家这种情况尚可,但对于同一厂家的不同产品,对用户就不太友好了,也不利于分析各个用户的行为。

单点登录就是为了将不同网站的用户信息统一到一起,统一认证与鉴权,如下图所示:

单点登录示例图

这样用户在一个网站做了登录,就可以访问其他网站了。参考

单系统认证流程

在进一步研究单点登录之前,现在回顾一下以前微服务中的认证方式。

我们有多个业务服务,还有专门的鉴权服务,其流程图如下所示(图参考):

微服务认证中心

这种方式可以看做简版的单点登录,多个服务共享认证中心。这里的客户端一般都是一个网站,对于多个网站的情况其结构类似,流程上稍有不同。

多系统单点登录

流程

单点登录的流程设计参照了OAuth2模型,它是为了使 第三方应用(client)访问的资源而设计的一套授权模型,稍后再对它进行解析。

首次登录的流程如下:

单点登录首次
  1. 用户访问网站1

  2. 网站1客户端重定向到鉴权中心后端

  3. 鉴权中心发现用户没有登录,重定向到鉴权中心客户端

  4. 鉴权中心客户端要求用户输入账号、密码

  5. 客户端将信息传递给鉴权中心后端

  6. 鉴权中心进行验证,生成Authorization Code,重定向到网站1客户端(携带Authorization Code)

  7. 网站1客户端将Authorization Code传递给网站1后端

  8. 网站1后端拿着Authorization Code找鉴权中心check

  9. 鉴权中心确定后返回给网站1

  10. 网站1后端生成自己的token返回给网站1客户端

再次登录的流程如下:

单点登录二次
  1. 用户登录网站2客户端
  2. 网站2客户端重定向到鉴权中心后端,这时候会携带网站中心的code
  3. 鉴权中心发现用户已经登录,直接返回Authorization Code
  4. 网站2客户端将Authorization Code传递给后端
  5. 后端再找鉴权中心check
  6. 鉴权中心通过
  7. 网站2后端生成自己的token发放给网站2客户端

问答

这里有点疑问:

  1. 第2步中,浏览器是如何携带该code的?

    可以在第一次的第6步中,将辨识信息传递浏览器,域名配置到根域名上

    那么重定向时,可以设置cookie吗

    如果不能,就需要第首次登录的时候第5步,先返回给前端,这时候可以设置cookie,再重定向到其他系统。

    具体这块,需要在试验中去完成

时序

又搜索了一下单点登录,阿里云社区给出的这篇文章,更清晰的说明了这个过程,果然是相同域名下的用cookie,不同域名下先返给鉴权中心的前端,其时序图如下:

CAS流程

参考

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×