CAS 信息
CAS 的基本信息
创建一个过滤器,继承 OncePerRequestFilter 类。
CAS 术语
- Ticket Granting Ticket (TGT):可以认为是 CAS Server 根据用户名密码生成的一张票,存在 Server 端。
- Ticket Granting Cookie (TGC):其实就是一个 Cookie,存放用户身份信息,由 Server 发给 Client 端。
- Service Ticket (ST):由 TGT 生成的一次性票据,用于验证,只能用一次。相当于 Server 发给 Client 一张票,然后 Client 拿着这个票再来找 Server 验证,看看是否由 Server 签发。
CAS 协议流程图
流程概述
用户首次访问系统 A
- 用户浏览器访问系统 A 中受限资源,此时系统 A 进行登录检查,发现未登录,然后系统 A 检查访问的 URL 中是否带有令牌(ST),发现没有令牌(因为是首次登录)。
- 系统 A 将用户请求重新定向到认证中心(CAS Server),认证中心进行获取全局票据(TGT)操作,没有(因为是首次登录),所以用户需要进行登录操作(输入用户名和密码)。
- 认证中心呈现登录页面,用户登录,登录成功后,认证中心给用户浏览器设置 Cookie(TGC),然后认证中心重新定向请求到系统 A,并附上认证通过令牌(ST),此时认证中心同时生成了全局票据(TGT)。
- 此时再次进行登录检查,发现未登录,然后再次获取令牌操作,就可以获得令牌(ST)。系统 A 拿着令牌和请求 URL 与认证中心通信,验证令牌有效,认证中心返回成功,证明用户已登录。
- 系统 A 生成相应的 session(用于下次用户访问时验证),然后将受限资源返给用户。
已登录用户首次访问系统 B
- 浏览器访问另一系统 B 需登录受限资源,此时进行登录检查(session 检查),发现未登录,然后系统 B 检查访问的 URL 中是否带有令牌(ST),发现没有令牌。
- 系统 B 将请求重新定向到认证中心,认证中心进行获取全局票据(TGT)操作,可以获得(因为之前已经登录过)。
- 认证中心发放令牌(ST),并携带该令牌重新定向到系统 B。
- 系统 B 再次进行登录检查,发现未登录,然后再次获取令牌操作,此时可以获得令牌(ST),系统 B 拿着令牌和请求 URL 与认证中心通信,验证令牌有效,认证中心返回成功,证明用户已登录。
- 系统 B 生成相应的 session(用于下次用户访问时验证),然后将受限资源返回给用户。
用户登出
- 用户向系统 A 发起登出请求动作,系统 A 清除本地 session,同时清除用户浏览器中相应的 cookie。
- 系统 A 将用户请求重定向到认证中心的登出接口,认证中心根据获取到的票据(TGT)清除本地 session,同时清除用户浏览器中相应的 cookie(TGC)。
- 认证中心把用户请求重新定向回系统 A,这时由于系统 A 中已经没有了 session,所以请求会被重新定向到认证中心的登录页面。至此,用户已经完全退出系统了。