CAS总结之Ticket篇
内部邀请码:C8E245J (不写邀请码,没有现金送)
国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。
原文地址: http://zhenkm0507.iteye.com/blog/546805
CAS的核心就是其Ticket,及其在Ticket之上的一系列处理操作。CAS的主要票据有TGT、ST、PGT、PGTIOU、PT,其中TGT、ST是CAS1.0协议中就有的票据,PGT、PGTIOU、PT是CAS2.0协议中有的票据。
一 名词解释
- TGT(Ticket Grangting Ticket)
TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。用户在CAS认证成功后,CAS生成cookie,写入浏览器,同时生成一个TGT对象,放入自己的缓存,TGT对象的ID就是cookie的值。当HTTP再次请求到来时,如果传过来的有CAS生成的cookie,则CAS以此cookie值为key查询缓存中有无TGT ,如果有的话,则说明用户之前登录过,如果没有,则用户需要重新登录。
- ST(Service Ticket)
ST是CAS为用户签发的访问某一service的票据。用户访问service时,service发现用户没有ST,则要求用户去CAS获取ST。用户向CAS发出获取ST的请求,如果用户的请求中包含cookie,则CAS会以此cookie值为key查询缓存中有无TGT,如果存在TGT,则用此TGT签发一个ST,返回给用户。用户凭借ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源。
- PGT(Proxy Granting Ticket)
Proxy Service的代理凭据。用户通过CAS成功登录某一Proxy Service后,CAS生成一个PGT对象,缓存在CAS本地,同时将PGT的值(一个UUID字符串)回传给Proxy Service,并保存在Proxy Service里。Proxy Service拿到PGT后,就可以为Target Service(back-end service)做代理,为其申请PT。
- PGTIOU(Proxy Granting Ticket IOU)
PGTIOU是CAS协议中定义的一种附加票据,它增强了传输、获取PGT的安全性。
PGT的传输与获取的过程:Proxy Service调用CAS的serviceValidate接口验证ST成功后,CAS首先会访问pgtUrl指向的https url,将生成的 PGT及PGTIOU传输给proxy service,proxy service会以PGTIOU为key,PGT为value,将其存储在Map中;然后CAS会生成验证ST成功的xml消息,返回给Proxy Service,xml消息中含有PGTIOU,proxy service收到Xml消息后,会从中解析出PGTIOU的值,然后以其为key,在map中找出PGT的值,赋值给代表用户信息的Assertion对象的pgtId,同时在map中将其删除。
- PT(Proxy Ticket)
PT是用户访问Target Service(back-end service)的票据。如果用户访问的是一个Web应用,则Web应用会要求浏览器提供ST,浏览器就会用cookie去CAS获取一个ST,然后就可以访问这个Web应用了。如果用户访问的不是一个Web应用,而是一个C/S结构的应用,因为C/S结构的应用得不到cookie,所以用户不能自己去CAS获取ST,而是通过访问proxy service的接口,凭借proxy service的PGT去获取一个PT,然后才能访问到此应用。
二 代码解析
CAS Ticket类图
- TicketGrantingTicket 的 grantServiceTicket方法
方法声明:public synchronized ServiceTicket grantServiceTicket(final String id,final Service service, final ExpirationPolicy expirationPolicy, final boolean credentialsProvided)
方法描述:
1:生成SerivceTicketImpl
2:更新属性:
this.previousLastTimeUsed = this.lastTimeUsed;
this.lastTimeUsed = System.currentTimeMillis();
this.countOfUses++;
3:给service对象的principal属性赋值
4:将service对象放入map services
- ServiceTicket 的 grantTicketGrantingTicket方法
方法声明:
public TicketGrantingTicket grantTicketGrantingTicket(final String id, final Authentication authentication,final ExpirationPolicy expirationPolicy)
方法描述:在CAS3.3对CAS2.0协议的实现中,PGT是由ST签发的,调用的就是ServiceTicket的grantTicketGrantingTicket方法。方法返回的TicketGrantingTicket对象,表征的是一个PGT对象,其中的ticketGrantingTicket属性的值是签发ST的TGT对象。
- TicketGrantingTicket 的 expire方法
方法声明:void expire()
方法描述:
在CAS的logout接口实现中,要调用TGT对象的expire方法,然后会在缓存中清除此TGT对象。
expire方法的内容:循环遍历 services 中的Service对象,调用其logoutOfService方法。具体Service实现类中的logoutOfService方法的实现,要通知具体的应用,客户要退出。
TGT、ST、PGT、PT之间关系的总结
1:ST是TGT签发的。用户在CAS上认证成功后,CAS生成TGT,用TGT签发一个ST,ST的ticketGrantingTicket属性值是TGT对象,然后把ST的值redirect到客户应用。
2:PGT是ST签发的。用户凭借ST去访问Proxy service,Proxy service去CAS验证ST(同时传递PgtUrl参数给CAS),如果ST验证成功,则CAS用ST签发一个PGT,PGT对象里的ticketGrantingTicket是签发ST的TGT对象。
3:PT是PGT签发的。Proxy service代理back-end service去CAS获取PT的时候,CAS根据传来的pgt参数,获取到PGT对象,然后调用其grantServiceTicket方法,生成一个PT对象。
TGT、ST、PGT、PT之间的关联关系
注:如果本文中介绍的 Ticket 概念不详细,请参考本人的另一篇文章 CAS 总结之协议分析篇,里面的动画演示比较清楚地表达了 Client 、 Service 、 CAS 三者之间的交互。
转载于:https://www.cnblogs.com/AloneSword/p/3248845.html
CAS总结之Ticket篇相关推荐
- 单点登录cas常见问题(四) - ticket有哪些存储方式?
配置文件ticketRegistry.xml负责配置ticket的存储方式,registry是注冊表,登记薄的意思 经常使用的存储方式包含 1.DefaultTicketRegistry:默认的.存储 ...
- cas修改界面html,为REST API配置的CAS将v1 / ticket重定向到登录HTML
我已经跟踪the instructions在我的CAS服务器中启用REST API,该服务器使用Maven覆盖构建,然后以cas.war的形式部署到Tomcat 7服务器.非常标准的设置. 根据说明, ...
- Java并发编程之CAS第三篇-CAS的缺点
Java并发编程之CAS第三篇-CAS的缺点 通过前两篇的文章介绍,我们知道了CAS是什么以及查看源码了解CAS原理.那么在多线程并发环境中,的缺点是什么呢?这篇文章我们就来讨论讨论 本篇是<凯 ...
- 高并发必学的 CAS 操作,看这篇就够了!
大家好,我是树哥. CAS 操作是高并发场景下,性能如此之高的一个重要优化.今天推荐胜哥的一篇关于 CAS 的文章,带你了解 CAS 的前世今生,写得真是太棒了! 背景 在高并发的业务场景下,线程安全 ...
- python实战-实现内网CAS统一认证登录
CAS(Central Authentication Service)集中式认证服务是一种广泛应用的单点登录协议,特别是在校园网和企业内网,它允许用户只需向认证服务器提供一次凭证,即可以访问多个应用系 ...
- CAS 介绍 单点登录认证系统
CAS 介绍 CAS(Central Authentication Service),是耶鲁大学开发的单点登录系统(SSO,single sign-on),应用广泛,具有独立于平台的,易于理解,支持 ...
- CAS客户端使用Ajax登陆(即保留原有客户端登录页面)
前言 因为对项目的不熟悉,在使用CAS的时候,踩了蛮多的坑,前面的文章提到了怎么跟shiro集成,可以说是花了比较多的时间.而实际的需求却不止于此.公司希望保留原有应用的登录页面.这个可又是一 ...
- SpringBoot 集成cas认证
之前一篇介绍了cas认证服务的整个流程:这篇文章Springboot框架里面如何整合cas实现整个认证的流程: 1>首先引入Springsecurity cas的依赖jar compile &q ...
- 使用 CAS 在 Tomcat 中实现单点登录
CAS 介绍 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目.CAS 具有以下特 ...
最新文章
- Python os模块常用命令
- RH124 章1 访问命令行 笔记
- 直流UPS的研究和应用前景
- .NET工程师的书单
- 【渝粤教育】 国家开放大学2020年春季 1021劳动与社会保障法 参考试题
- 老板让我从上千个Excel中筛选数据,利用Python分分钟解决!
- HP M1136无法打印的解决方法
- calculate函数使用方法c语言,使用 CALCULATE 函数
- sass基础语法-Mixin混合器,%placeholder占位符继承之间的区别
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
- 八、python编写IP地址计算第一个可用IP地址、最后一个可用IP地址、网络号、广播地址、主机数
- 薇娅,李佳琦都点赞的淘宝双11直播系统,是如何打造的?
- 你是如何进行文件备份的?
- @test 不允许在这里_“我们不在这里为他们服务”
- vscode 实用插件
- 文献管理软件 linux,5款常用的文献管理软件
- 工控机和服务器哪个稳定性高,简单分析工控机和服务器有什么不同
- 常用的testbench和matlab代码之读取和写入文本代码
- 本固枝荣 —— Java关键字之分类
- 画世界怎么用光影_世界绘画经典教程:水彩光影魔法教程
热门文章
- Vue中mounted和created的区别
- 修复linux bash破壳漏洞,Linux系统下如何检测并修复bash中的破壳漏洞​​
- keep-alive + vuex + mint + Infinite scroll 保存分页列表数据
- 苹果推出新款iPad Air和iPad mini,升级A12处理器
- lvs+keepalived+nginx实现高性能负载均衡集群 高性能jsp集群
- Android Studio第二十七期 - RecycleView不同item布局
- eclipse 矩阵删除行列,也可以矩阵形式编辑
- Shell命令_for
- 现代操作系统原理与实践02:硬件结构
- windows下批处理常用句法