cas单点登录

开门见山,如下图为cas登录的序列图

 

cas实现单点登录的主要票据有两个,一个是TGT,一个是ST。

因为是做单点登录的,所以客户端应该是有多个的,当其中一个登录之后,在同一浏览器中在登陆其他客户端用户是感知不到再次登录的,原因是第一次登录成功后cookie记录一个TGT,这个cookie在浏览器中是共享的,客户端可以携带TGT的cookie请求服务端,然后服务端校验TGT以及请求的服务,如果通过的话会生成对应服务的一个ST票据,客户端生成session以及ST与session的对应关系,下次请求这个服务只需要校验session即可;

在工作时遇到一个服务多活情况下单点登出的问题,等一个服务登录成功后会生成session,在多个实例之间session是共享的,但是ST与session的对应关系只有登录成功那个实例有保存。在说一下cas的单点登出的逻辑,在回头看前一句,单点登出为访问cas服务端的logout接口,里面的逻辑为遍历所有注册的客户端的url,携带ST ,让每一个客户端都做登出逻辑,在客户端中通过ST找到对应的session注销并清除ST 与session的对应关系,之前说过了,只有登录成功的实例才有保存ST与session的对应关系,所以当访问到未保存的实例时,登出失败。我们的解决方案是通过共享缓存来自己实现保存ST与session的对应关系,修改一下cas客户端登出的逻辑,(实现一个SessionMappingStorage接口,并set到SingleSignOutFilter中即可)这样就不会有问题了。

cas的流程看服务端的 login-webflow.xml 中的流程,梳理几遍就会弄懂里面的逻辑。

源码讲解可以参考下这个博客:https://blog.csdn.net/dovejing/article/details/44523545

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值