持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情
前言
大家好,我是陈同学,一枚野生前端开发者,感谢各位的点赞、收藏、评论
CAS(Central Authentication Service):中央认证服务,一种独立开放指令协议,目标是为Web应用系统提供一种可靠的单点登录方法
本节文章我们就来聊聊CAS的结构设计与用户认证流程
本文阅读成本与收益如下:
阅读耗时:3mins
全文字数:2k
预期效益
- 了解SSO
- 学习CAS用户认证流程
什么是SSO
SSO(Single Sign-On):单点登录
用户在身份认证服务器上登录一次,即可获得访问单点登录系统中其他关联系统和应用的权限
对于技术来说,这种方式将用户认证逻辑抽离成一个单独的服务模块,无需让每一个应用都开发完整的用户登录校验功能模块,降低开发成本
对于用户来说,只需要登录一次就可以同时访问多个关联应用,无需重复登录
举个例子:
我们去水上游乐园玩的时候,进门需要买票(登录),验票成功后便可以入园玩耍
一般园内每一种游乐设施均直接向我们开放使用,无需重复进行购票(登录),只需要佩戴专属的手环(通票)即可
CAS组成
CAS的两部分:
- CAS-Server:用户的认证工作,就像是把第一次登录用户的一个标识存在这里
- CAS-Client:业务web应用服务,登录逻辑接入CAS Server端
相关概念:
TGT(Ticket-Granting ticket):CAS-Server根据用户名登录提供的凭证(密码)生成的一张票(本质上理解成一段字符串),缓存在Server端,应用过程中配合TGC生成ST
TGC(Ticket-Granting cookie):一个Cookie字符串,存放用户身份信息,由Server通过Response Header发给Client端
ST(Service ticket):由TGT生成的一次性票据(一般有效期设置为5mins,并且只能用一次),用于给CAS-Client到CAS-Server中验证用户身份
CAS登录流程
第一次访问应用A
用户第一次访问应用网站A,网站A的服务中发现没有Cookie的登录态,则将请求转发到CAS-Client,检测发现query当中也没有没有ST字符串,故将用户重定向到CAS-Server的登录页面
用户于登陆页面输入用户名登录认证,认证成功后CAS-Server生成TGT,并通过TGT生成一个ST字符串
然后返回set-cookie(TGC)到浏览器并进行重定向回网站A(重定向URL携带ST,如:xxx.xxx.xxx/cas?token=$…)
网站A服务收到ST后去CAS-Server验证是否为自己签发的,若校验通过,则返回用户信息给网站A服务,然后网站A服务便可以基于拿到的用户信息,保存用户信息并构造属于自己应用的登录态,最后将登录态通过Set-Cookie或返回票据的方式给到前端,之后浏览器每一次发起对当前服务的请求,均会带上登录态信息
第一次访问应用B
访问另一个接入CAS的网站B,网站B服务检测到用户没有登录态信息(如:Cookie),重定向到CAS-Server,中央认证服务判断第一次来(Cookie中有TGC,无需用户重复提交登陆凭证)
直接向CAS-Server申请一个ST令牌
CAS-Server通过TGT和TGC生成ST令牌,通过嵌入到Response Header的Location的形式在浏览器重定向时给网站B服务
网站B服务收到ST后再去CAS-Server进行校验
业务应用的登录态维护
无论是上面所讲到的网站A还是网站B,接入CAS的用户身份校验流程后都需要自行维护自己应用的登录态
目前最常见的两种方案:
- JWT
- session
这里推荐一篇文章:juejin.cn/post/684490…
讲到最后
本文章简单介绍了一下CAS的全流程逻辑
谢谢大家,我们下节再见!!!
感谢各位看到这里,如果你觉得本节内容还不错的话,欢迎各位的点赞、收藏、评论,大家的支持是我做内容的最大动力
本文为作者原创,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利