自建网站的优缺点,中国建设银行青岛网站,东莞 建网站,一般纳税人网站建设多少税率CAS的核心就是其Ticket#xff0c;及其在Ticket之上的一系列处理操作。CAS的主要票据有TGT、ST、PGT、PGTIOU、PT#xff0c;其中TGT、ST是CAS1.0协议中就有的票据#xff0c;PGT、PGTIOU、PT是CAS2.0协议中有的票据。一 名词解释TGT#xff08;Ticket Grangting Ticket及其在Ticket之上的一系列处理操作。CAS的主要票据有TGT、ST、PGT、PGTIOU、PT其中TGT、ST是CAS1.0协议中就有的票据PGT、PGTIOU、PT是CAS2.0协议中有的票据。一 名词解释TGTTicket Grangting TicketTGT是CAS为用户签发的登录票据拥有了TGT用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。用户在CAS认证成功后CAS生成cookie写入浏览器同时生成一个TGT对象放入自己的缓存TGT对象的ID就是cookie的值。当HTTP再次请求到来时如果传过来的有CAS生成的cookie则CAS以此cookie值为key查询缓存中有无TGT 如果有的话则说明用户之前登录过如果没有则用户需要重新登录。STService TicketST是CAS为用户签发的访问某一service的票据。用户访问service时service发现用户没有ST则要求用户去CAS获取ST。用户向CAS发出获取ST的请求如果用户的请求中包含cookie则CAS会以此cookie值为key查询缓存中有无TGT如果存在TGT则用此TGT签发一个ST返回给用户。用户凭借ST去访问serviceservice拿ST去CAS验证验证通过后允许用户访问资源。PGTProxy Granting TicketProxy Service的代理凭据。用户通过CAS成功登录某一Proxy Service后CAS生成一个PGT对象缓存在CAS本地同时将PGT的值一个UUID字符串回传给Proxy Service并保存在Proxy Service里。Proxy Service拿到PGT后就可以为Target Serviceback-end service做代理为其申请PT。PGTIOUProxy Granting Ticket IOUPGTIOU是CAS协议中定义的一种附加票据它增强了传输、获取PGT的安全性。PGT的传输与获取的过程Proxy Service调用CAS的serviceValidate接口验证ST成功后CAS首先会访问pgtUrl指向的https url将生成的 PGT及PGTIOU传输给proxy serviceproxy service会以PGTIOU为keyPGT为value将其存储在Map中然后CAS会生成验证ST成功的xml消息返回给Proxy Servicexml消息中含有PGTIOUproxy service收到Xml消息后会从中解析出PGTIOU的值然后以其为key在map中找出PGT的值赋值给代表用户信息的Assertion对象的pgtId同时在map中将其删除。PTProxy TicketPT是用户访问Target Serviceback-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 servicesServiceTicket 的 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之间关系的总结1ST是TGT签发的。用户在CAS上认证成功后CAS生成TGT用TGT签发一个STST的ticketGrantingTicket属性值是TGT对象然后把ST的值redirect到客户应用。2PGT是ST签发的。用户凭借ST去访问Proxy serviceProxy service去CAS验证ST同时传递PgtUrl参数给CAS如果ST验证成功则CAS用ST签发一个PGTPGT对象里的ticketGrantingTicket是签发ST的TGT对象。3PT是PGT签发的。Proxy service代理back-end service去CAS获取PT的时候CAS根据传来的pgt参数获取到PGT对象然后调用其grantServiceTicket方法生成一个PT对象。 TGT、ST、PGT、PT之间的关联关系注如果本文中介绍的 Ticket 概念不详细请参考本人的另一篇文章 CAS 总结之协议分析篇里面的动画演示比较清楚地表达了 Client 、 Service 、 CAS 三者之间的交互。 转载于:https://blog.51cto.com/magina/1395419