由于公司项目甲方众多,各甲方为了统一登录用户体系实现单点登录(SSO)开始要求各乙方项目对接其搭建的CAS单点登录服务,有段时间对CAS的流程很迷,各厂商还有基于CAS进行二次开发的情况,所以对它的官方文档进行了一定的学习,记录下来帮助有需要的同学。
由于CAS的验签协议较多,此处将仅使用 验签 略过其子流程,感兴趣的可以查看官方文档进行系统学习。
术语此处将不介绍验签相关的术语,约等于CAS1
CAS (Central Authentication Service) - 中央认证服务器
SSO (Single Sign On) - 单点登录
CAS Client - 集成CAS登录流程的应用服务
TGT (ticket-granting tickets) - 存在 CAS 服务端的用户票据,可使用此票据颁发ST
TGC - 存在浏览器的 Cookie,对应 CAS 服务端的 TGT
ST - 服务票据,CAS为每个登录成功的应用服务生成唯一票据,对应应用服务的服务名(serverName)
CAS单点登录流程单点登录流程:
用户通过浏览器请求服务A资源
服务A校验发现此请求未认证,重定向浏览器到CAS服务端登录地址
用户通过浏览器输入用户名密码,发起登录请求
CAS服务端校验用户名密码通过,响应头会将TGC写入浏览器CAS域名的Cookie中,重定向浏览器到 服务A地址 + 服务A的ST
服务A向CAS服务端发起校验ST请求,验证通过后服务A重定向请求到服务A未携带ST的地址,业务响应返回结果
用户通过浏览器请求服务B的资源
服务B发现此请求未认证,重定向浏览器到CAS服务端登录地址,由于CAS地址的Cookie有TGC,重定向时会被携带传递给CAS服务端
CAS服务端校验TGC发现有对应的TGT,颁发ST给服务B,重定向浏览器到 服务B + 服务B的ST
服务B向CAS服务端发起校验ST请求,验证通过后服务B重定向请求到服务A未携带ST的地址,业务响应返回结果
总结用户登录成功会创建TGT,由TGT颁发ST。
用户浏览器端会保存TGC,它对应一个TGT
浏览器端存在未过期的TGC,访问CAS服务端时携带TGC,CAS使用TGT颁发ST,实现单点登录