生动形象的CAS

本文通过将CAS(Central Authentication Service)单点登录的原理比作机场买票坐飞机的过程,生动解释了TGT和ST的作用以及CAS与应用服务器的交互过程,帮助读者更好地理解单点登录的运作机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章开始之前首先要吐槽一下现在的网络环境,只要你在网上搜索一个具体的问题,搜索出来的基本上都是千篇一律,各种转载各种抄袭,很难找到一点自己原创且能把东西说清楚的。 最近工作之余回顾了一下CAS的原来,发现其中有一些概念让刚接触这个东西的人真的会是一头雾水,于是想在现实生活中找一个类似的场景来说明这样的事情,并将其记录于此。

首先放一张网上到处转载处可以找到的图:


如果你看了这幅图能完全明白CAS流程,那就不用往下看了,你理解能力挺强的,反正两年以前我看这幅图是看得晕乎晕乎的,如果不明白,我保证你看了下面就能明白。

单点登录涉及都几个参与者:1.单点认证服务器(CAS SERVER) 2.客户端浏览器 3.N多个的应用服务器

                        涉及到的概念:1.TGT  2.ST (这两个就够了,其它有代理的情况自己再深入理解)

然后抛出几个问题:TGT到底是什么鬼? 用来做什么的 ?

                                    ST到底是什么鬼?用来做什么的?

                                    CAS和你的应用服务器到底是怎么交互?当你直接访问你的应用服务器时,是怎么知道你已经认证成功了的 ?

带着问题,我想到了现实生活中有一个场景与单点登录场景非常相似——机场买票坐飞机, 如下图:


我们想像一下坐飞机我们要经过哪些流程:  1.拿个身份证去售票厅买票

       2.带着登机牌去登机口检票

                                                              3.检票成功登机

接下来一步一步和单点登录对应: 

第一步:单点登录页面输入用户名密码,点击登录,如果登录成功单点登录服务器会记录一个TGT的东西,先不要管TGT是什么,反正就是一个对象,一个字符串都可以,并且同时会往cookie中写入一个key,这个key是用来对应TGT的,这个时候浏览器上就有了这个对于TGT的key,于此同时cas服务器会将登陆请求重定向到你的应用服务器,并携带一个名叫ST的东西,到这个时候登录这一步其实就完了。 然后想想发生了什么? 你输入了密码,cas服务器产生了TGT,并且让浏览器cookie记住了这个TGT,并且还重定向请求到了你的应用服务器,并且还携带了一个叫ST的东西。

OK, 我们将上面的过程换成你去买机票:

首先你需要提供身份证和钱去售票厅购买机票(相当于输入用户名密码),售票厅验证你是合法人口后给你一张登机牌,并给你说你应该取哪个哪个登机(这相当于CAS服务往cookie中写入TGT对应的key,只是现实中这个key是记在人的内存(大脑)中,而CAS重定向就相当于售票厅给你登机牌,并告诉你去哪里登机)

第二步:你的应用服务器收到CAS重定向过来的请求,它会检查这个请求是否有ST(至于怎么检查一会说),然后请求CAS校验ST

这一步相当于什么呢, 相当于你拿个登机牌来到了某个登机口,检票人员让你出示登机牌,并且登机牌在机器上扫描一下,验证下你这登机牌是不是正确的,ST就相当于登机牌,检票的过程就相当于请求CAS验证ST, 如果验证通过当然你就可以登记了

到此一个正常顺利的单点登录就完成了,其中涉及到买票,购票人自己记住已经买过票(TGT),售票厅给你登机牌(ST), 检票登机


如果上面的理解了,接下来说说异常的情况:

1.你直接访问你的应用服务器地址,而不是首先访问单点登录服务器,这就相当于你直接去安检口,而不是先去购票厅,如果你有票(有ST),OK那能顺利的通过安检进入登机,如果你没有票(从来没在CAS认证过,就没有ST),那么安检人员会告诉你,你得先去购票厅购票(你的登录请求会被拦截,然后让CAS校验ST,发现你没有ST, 于是跳转到单点登录页面让你登录先), 来到售票厅, 你脑海你突然想起,你是买过票的,只是没有取票(这相当于你的浏览器中有TGT对应的那个key,并且对应的TGT对应还存在CAS服务器中, 这个时候CAS就能通过这个key直接校验通过,不用你再输入用户名密码),然后你直接取票(相当于CAS重定向到你的应用并分配ST), 然后去安检登机

2.还有一种情况,你关闭浏览器后再次直接打开你的应用,这种情况相当于你安检通过,突然发现你的东西掉在外面了,你需要出去拿,然后你出来拿东西了, 然后你现在需要再一次过安检,这个时候你只需要出示登机牌就行了,就相当于浏览器会携带ST访问你的应用,当然接下来就是检票(应用将请求委托CAS验证ST),然后通过或者不通过。


3.session超时,期数就相当于你误机了,需要改签。 你需要重新去售票厅,出示身份证,改签,然后给你新的登机牌。

到这里,单点登录的过程基本上是包含了,接下来回答刚才提出的几个问题:

TGT到底是什么鬼? 用来做什么的 ?

TGT就是售票厅用来记录你你已经买过票的一个凭证,那么为什么要往cookie中写入一个key来对应呢 ?  这就相当于你往你自己大脑中写入一条数据:我已经买票了,这票是去北京的,几点钟的等等信息。

ST到底是什么鬼?用来做什么的?

ST就是你的登机牌呀,你要过安检呀,才能做飞机呀。 ST就是记录了TGT后  CAS给你的一个凭证。

CAS和你的应用服务器到底是怎么交互?当你直接访问你的应用服务器时,是怎么知道你已经认证成功了的 ?

CAS和应用服务器都是通过重重定向交互的呀,告诉你去哪里登机,重定向时写入cookie。  怎么知道你已经认证成功了,这还不简单么,你脑海中记录得呀,就相当于cookie中有那个key呀,登机的时候怎么知道你已经认证了?  你傻呀,你有登机牌(ST)呀。







                                  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值