国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html
内部邀请码: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篇相关推荐

  1. 单点登录cas常见问题(四) - ticket有哪些存储方式?

    配置文件ticketRegistry.xml负责配置ticket的存储方式,registry是注冊表,登记薄的意思 经常使用的存储方式包含 1.DefaultTicketRegistry:默认的.存储 ...

  2. cas修改界面html,为REST API配置的CAS将v1 / ticket重定向到登录HTML

    我已经跟踪the instructions在我的CAS服务器中启用REST API,该服务器使用Maven覆盖构建,然后以cas.war的形式部署到Tomcat 7服务器.非常标准的设置. 根据说明, ...

  3. Java并发编程之CAS第三篇-CAS的缺点

    Java并发编程之CAS第三篇-CAS的缺点 通过前两篇的文章介绍,我们知道了CAS是什么以及查看源码了解CAS原理.那么在多线程并发环境中,的缺点是什么呢?这篇文章我们就来讨论讨论 本篇是<凯 ...

  4. 高并发必学的 CAS 操作,看这篇就够了!

    大家好,我是树哥. CAS 操作是高并发场景下,性能如此之高的一个重要优化.今天推荐胜哥的一篇关于 CAS 的文章,带你了解 CAS 的前世今生,写得真是太棒了! 背景 在高并发的业务场景下,线程安全 ...

  5. python实战-实现内网CAS统一认证登录

    CAS(Central Authentication Service)集中式认证服务是一种广泛应用的单点登录协议,特别是在校园网和企业内网,它允许用户只需向认证服务器提供一次凭证,即可以访问多个应用系 ...

  6. CAS 介绍 单点登录认证系统

    CAS 介绍  CAS(Central Authentication Service),是耶鲁大学开发的单点登录系统(SSO,single sign-on),应用广泛,具有独立于平台的,易于理解,支持 ...

  7. CAS客户端使用Ajax登陆(即保留原有客户端登录页面)

    前言     因为对项目的不熟悉,在使用CAS的时候,踩了蛮多的坑,前面的文章提到了怎么跟shiro集成,可以说是花了比较多的时间.而实际的需求却不止于此.公司希望保留原有应用的登录页面.这个可又是一 ...

  8. SpringBoot 集成cas认证

    之前一篇介绍了cas认证服务的整个流程:这篇文章Springboot框架里面如何整合cas实现整个认证的流程: 1>首先引入Springsecurity cas的依赖jar compile &q ...

  9. 使用 CAS 在 Tomcat 中实现单点登录

    CAS 介绍 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目.CAS 具有以下特 ...

最新文章

  1. Python os模块常用命令
  2. RH124 章1 访问命令行 笔记
  3. 直流UPS的研究和应用前景
  4. .NET工程师的书单
  5. 【渝粤教育】 国家开放大学2020年春季 1021劳动与社会保障法 参考试题
  6. 老板让我从上千个Excel中筛选数据,利用Python分分钟解决!
  7. HP M1136无法打印的解决方法
  8. calculate函数使用方法c语言,使用 CALCULATE 函数
  9. sass基础语法-Mixin混合器,%placeholder占位符继承之间的区别
  10. 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
  11. 八、python编写IP地址计算第一个可用IP地址、最后一个可用IP地址、网络号、广播地址、主机数
  12. 薇娅,李佳琦都点赞的淘宝双11直播系统,是如何打造的?
  13. 你是如何进行文件备份的?
  14. @test 不允许在这里_“我们不在这里为他们服务”
  15. vscode 实用插件
  16. 文献管理软件 linux,5款常用的文献管理软件
  17. 工控机和服务器哪个稳定性高,简单分析工控机和服务器有什么不同
  18. 常用的testbench和matlab代码之读取和写入文本代码
  19. 本固枝荣 —— Java关键字之分类
  20. 画世界怎么用光影_世界绘画经典教程:水彩光影魔法教程

热门文章

  1. Vue中mounted和created的区别
  2. 修复linux bash破壳漏洞,Linux系统下如何检测并修复bash中的破壳漏洞​​
  3. keep-alive + vuex + mint + Infinite scroll 保存分页列表数据
  4. 苹果推出新款iPad Air和iPad mini,升级A12处理器
  5. lvs+keepalived+nginx实现高性能负载均衡集群 高性能jsp集群
  6. Android Studio第二十七期 - RecycleView不同item布局
  7. eclipse 矩阵删除行列,也可以矩阵形式编辑
  8. Shell命令_for
  9. 现代操作系统原理与实践02:硬件结构
  10. windows下批处理常用句法