【实战】从零搭建SSO单点登录服务器 - CAS认证流程

2,105 阅读3分钟

这是我参与更文挑战的第5天,活动详情查看: 更文挑战

4679233.png

前言

因系统逐渐增多,各个业务系统间无法共享用户状态,每个系统都需要用户登录。这对于用户来说很不友好,于是需要搭建一个SSO单点登录服务器,来做统一的登录、注销。

写这个系列的文章有两个目的:

  1. 记录自己的学习过程
  2. 网上关于使用 Apereo CAS 来做单点登录的文章比较少,故想分享给大家 注:Apereo CAS文档及仓库参考为6.3.4

往期链接

一、CAS认证流程

通过前面的两篇文章已经了解到了什么是 SSO单点登录 以及什么是 CAS,这篇文章主要是详细的描述CAS的认证流程。

tips:了解 CAS 认证流程最好的方式就是看官方文档

首次登录

首次登录的时序图如下所示(可能有点长,先大致过一遍,后面会有文字讲解)

image.png

首次登录的时序图解释

① 发起请求到 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 获取用户信息的

第二次登录

第二次登录是指第二次登录其它应用程序

第二次登录的时序图如下所示

cas_flow_diagram1.png

第二次登录时序图解释

① 发起请求到 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服务端发现当前用户已登录,返回相应的内容

二、总结

遇到这种流程复杂的项目,多看文档,多理解即可。

感谢看到最后,非常荣幸能够帮助到你~♥