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是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是用户访问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
三者之间的交互。
本人博客:http://zhenkm0507.iteye.com
- 大小: 27.4 KB
- 大小: 7.3 KB
分享到:
相关推荐
为了实现在不跳转到CAS服务器登录页面的情况下获取ticket,我们可以通过以下步骤进行: 1. 配置Spring Boot:首先,我们需要在Spring Boot应用中引入必要的依赖,如CasClient、Shiro和Pac4J的相关依赖。然后,在...
在CAS 3.5.2版本中,可以配置JPA Ticket Registry以存储Ticket并实现在多个CAS Server实例间的共享。 首先,确保项目已经包含了Hibernate的相关依赖,因为JPA在CAS中的实现通常依赖于Hibernate作为ORM框架。版本...
CAS单点登录,退出后ticket失效报出异常解决办法——换jar包 把客户端的 casclient.jar 包换成我的这个。
CAS单点登录,退出后ticket失效报出异常解决办法——换jar包 把客户端的 casclient.jar 包换成我的这个。
CAS 是建立在开放的协议之上的,支持多层 SSO 能力,能够与多种语言和平台集成。 CAS 的总体架构包括 CAS 服务器和 CAS 客户端两个部分。CAS 服务器是一个基于 Java 的 Web 应用程序,使用 Spring 技术,支持 ...
配置Apache和Tomcat实现请求转发(负载均衡) 配置CAS实现Ticket共享(或复制) 配置Tomcat实现Session复制,这里主要是为了复制Web Flow的flowExecutionKey(CAS使用了Spring Web Flow)
这个压缩包“H3C CAS总结.zip”包含了丰富的资料,包括经验文件夹、配置案例、开局手册等,这些都是理解和掌握H3C CAS的重要资源。 首先,我们来看“CAS维护实验”。这个文件夹可能包含了一系列的实践操作教程,...
在这个项目中,CAS服务器负责处理用户的登录验证,验证成功后,它会生成一个Ticket并发送给客户端,客户端再用这个Ticket向各个服务请求访问权限。 Shiro是Apache的一个开源安全框架,它提供了一种简单的方式来管理...
如果验证成功,CAS会返回一个票据(Ticket)给客户端浏览器,然后客户端再将这个票据发送给目标应用,应用通过与CAS服务器通信验证票据的有效性,从而完成登录过程。 **二、CAS客户端** CAS客户端则集成在各个应用...
1. **安装CAS客户端库**:通常,我们可以通过NuGet包管理器安装`Castle.Services.Ticket`或`CasClient2`等CAS客户端库。 2. **配置web.config**:在项目的web.config文件中添加相应的CAS配置节。这包括设置CAS...
其核心流程包括:用户首次访问受保护资源时会被重定向到CAS服务器进行身份验证,成功后服务器返回一个票据(Ticket),客户端通过这个票据访问资源,资源服务器验证票据有效后允许访问。 2. Java实现:CAS服务器是...
CAS 协议 票据、url 介绍,包括 cas1.0 和 cas2.0 CAS 协议是一个基于 HTTP 的协议,分为两部分:票据(Ticket)和 URL。CAS 协议的主要目的是提供单点登录(SSO)功能,实现用户的身份验证和授权。 票据(Ticket...
7. 在Vue前端实现CAS登录跳转逻辑,处理CAS服务返回的ticket,进行SSO验证。 8. 测试整个系统,确保登录、权限控制和SSO功能正常工作。 这个项目展示了如何将现代开发技术和安全性协议结合,构建一个完整的、具有单...
压缩包中包含的文档将指导你如何配置CAS客户端,包括在Spring或Web.xml中添加必要的配置项,设置服务URL,以及处理TGT(Ticket Granting Ticket)和ST(Service Ticket)。 3. **CAS4.2.7源码**: CAS 4.2.7是CAS...
总结来说,CAS SSO服务器是实现单点登录的关键组件,它简化了多应用系统的身份验证流程,提升了安全性。理解并掌握CAS的工作原理和配置,能帮助我们有效地管理和维护SSO环境,为用户提供便捷且安全的访问体验。
用户登录成功后,CASClient 会将用户的 Session 信息存储在 Ticket 中,然后将 Ticket 返回给浏览器。浏览器将 Ticket 存储在 Cookie 中。当用户访问其他应用时,可以使用 Ticket 来验证用户的身份。 统一注销的...
- 验证成功后,CAS服务器生成Service Ticket并将其发送给用户,同时返回一个成功消息。 - 用户将Service Ticket和原始服务URL一起提交给服务应用。 - 服务应用向CAS服务器验证Service Ticket,确认无误后,允许...
4. CAS验证凭证,如果有效,生成TGT(Ticket-Granting Ticket)并存储在服务器端,同时创建TGC(Ticket-Granting Cookie)发送给客户端。 5. CAS生成ST(Service Ticket),用于授权访问特定服务,并将用户重定向回...
5. **CAS验证Ticket并放行:** CAS服务器验证Ticket无误后,确认用户已经过身份验证,允许应用系统A访问。 6. **用户访问应用系统B:** 当用户尝试访问第二个应用系统B时,同样会被重定向到CAS服务器,因为Ticket还...
如果认证成功,CAS会返回一个服务票证(Service Ticket),这个票证是安全的,只能用于一次访问。应用接收到票证后,会向CAS服务器验证其有效性,验证通过后用户即可访问应用。 要实现其他系统与CAS的互信,你需要...