前言
因系统逐渐增多,各个业务系统间无法共享用户状态,每个系统都需要用户登录。这对于用户来说很不友好,于是需要搭建一个SSO单点登录服务器,来做统一的登录、注销。
写这个系列的文章有两个目的:
- 记录自己的学习过程
- 网上关于使用 Apereo CAS 来做单点登录的文章比较少,故想分享给大家
注:Apereo CAS文档及仓库参考为6.3.4
往期链接
一、CAS认证流程
通过前面的两篇文章已经了解到了什么是 SSO单点登录
以及什么是 CAS
,这篇文章主要是详细的描述CAS的认证流程。
tips:了解 CAS 认证流程最好的方式就是看官方文档
首次登录
首次登录的时序图如下所示(可能有点长,先大致过一遍,后面会有文字讲解)
首次登录的时序图解释
① 发起请求到 app.example.com
,App对应的服务端发现当前用户未登录,重定向至 CAS 服务地址 cas.example.com?service=xxx
(注意:url中携带 service=xxx
,即是从哪个应用程序过来的)
② CAS 服务器发现当前用户未登录,返回登录页面
③ CAS输入正确的账号密码后,CAS 向Cookie中写入 TGT
, 并重定向到之前的服务地址 app.example.com?ticket=xxx
(注意:url中携带CAS服务端颁发的 ticket
)
④ 应用程序服务端接收到参数含有 ticket
的请求,则用 ticket
向 CAS 服务端换取用户信息并写入当前会话,再重定向至 app.example.com
⑤ 应用层序服务端发现当前用户已登录,返回相应的内容
名词解释(通俗易懂)
TGT(Ticket Granting Ticket):CAS 服务端用来标识当前用户是否登陆过的
ticket:其它应用程序用来向 CAS 获取用户信息的
第二次登录
第二次登录是指第二次登录其它应用程序
第二次登录的时序图如下所示:
第二次登录时序图解释
① 发起请求到 app2.example.com
,App2对应的服务端发现当前用户未登录,重定向到 CAS 服务地址 cas.example.com?service=xxx
(注意:与首次登录一致,url中同样携带 service=xxx
,即是从哪个应用程序过来的)
② 因前面再 CAS 中登陆过,所以在请求 cas.example.com?service=xxx
时,Cookie中会含有 TGT。CAS 服务通过 TGT 得知用户已登录,则重定向至 app2.example.com?ticket=xxx
(注意:与首次登录一致,url中同样携带CAS服务端颁发的 ticket
)
③ 应用程序2服务端接收到参数含有 ticket
的请求,则用 ticket
向 CAS 服务端换取用户信息并写入当前会话,再重定向至 app2.example.com
④ 应用层序2服务端发现当前用户已登录,返回相应的内容
二、总结
遇到这种流程复杂的项目,多看文档,多理解即可。
感谢看到最后,非常荣幸能够帮助到你~♥
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)