SSO 单点登录 - CAS(集中认证服务)

真正的单点登录,可以通过 CAS 来设计,集中认证服务,也就是认证是由一个独立的域名提供的网页认证服务(也是一个系统,认证中心)。

多个域名共享Cookie,在写到客户端的时候设置Cookie的domain。也就是说需要一个地方设置哪些域名是可以共享Cookie,也就是单点登录的所有系统的域名。

这个过程和微信公众号的网页认证一样,流程描述如下:

现在有两个应用系统(www.java3y.comwww.java4y.com)和一个认证系统(www.sso.com)

 

 

首先,用户想要访问系统Awww.java3y.com受限的资源(比如说购物车功能,购物车功能需要登录后才能访问),系统Awww.java3y.com发现用户并没有登录,于是重定向到sso认证中心,并将自己的地址作为参数。请求的地址如下:

  • www.sso.com?service=www.java3y.com

sso认证中心发现用户未登录,将用户引导至登录页面,用户进行输入用户名和密码进行登录,用户与认证中心建立全局会话(生成一份Token,写到Cookie中,保存在浏览器上)

 

 

随后,认证中心重定向回系统A,并把Token携带过去给系统A,重定向的地址如下:

  • www.java3y.com?token=xxxxxxx

接着,系统A去sso认证中心验证这个Token是否正确,如果正确,则系统A和用户建立局部会话(创建Session)。到此,系统A和用户已经是登录状态了。

 

 

此时,用户想要访问系统Bwww.java4y.com受限的资源(比如说订单功能,订单功能需要登录后才能访问),系统Bwww.java4y.com发现用户并没有登录,于是重定向到sso认证中心,并将自己的地址作为参数。请求的地址如下:

  • www.sso.com?service=www.java4y.com

注意,因为之前用户与认证中心www.sso.com已经建立了全局会话(当时已经把Cookie保存到浏览器上了),所以这次系统B重定向到认证中心www.sso.com是可以带上Cookie的。

认证中心根据带过来的Cookie发现已经与用户建立了全局会话了,认证中心重定向回系统B,并把Token携带过去给系统B,重定向的地址如下:

  • www.java4y.com?token=xxxxxxx

接着,系统B去sso认证中心验证这个Token是否正确,如果正确,则系统B和用户建立局部会话(创建Session)。到此,系统B和用户已经是登录状态了。

 

 

CAS官网上的标准流程如下:

 

posted @ 2021-01-16 10:02  heroljy  阅读(716)  评论(0编辑  收藏  举报