CAS Ticket票据:TGT、ST、PGT、PT、PGTIOU

CAS的核心就是其Ticket,及其在Ticket之上的一系列处理操作。CAS的主要票据有TGTSTPGTPGTIOUPT,其中TGTSTCAS1.0协议中就有的票据,PGTPGTIOUPTCAS2.0协议中有的票据。

1、术语解释

·         TGTTicket Grangting Ticket

TGTCAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。用户在CAS认证成功后,CAS生成cookie(叫TGC),写入浏览器,同时生成一个TGT对象,放入自己的缓存,TGT对象的ID就是cookie的值。当HTTP再次请求到来时,如果传过来的有CAS生成的cookie,则CAS以此cookie值为key查询缓存中有无TGT ,如果有的话,则说明用户之前登录过,如果没有,则用户需要重新登录。

·         TGC Ticket-granting cookie):

存放用户身份认证凭证的cookie,在浏览器和CAS Server间通讯时使用,并且只能基于安全通道传输(Https),是CAS Server用来明确用户身份的凭证。

·         STService Ticket

STCAS为用户签发的访问某一service的票据。用户访问service时,service发现用户没有ST,则要求用户去CAS获取ST。用户向CAS发出获取ST的请求,如果用户的请求中包含cookie,则CAS会以此cookie值为key查询缓存中有无TGT,如果存在TGT,则用此TGT签发一个ST,返回给用户。用户凭借ST去访问serviceserviceSTCAS验证,验证通过后,允许用户访问资源。

·         PGTProxy Granting Ticket

Proxy Service的代理凭据。用户通过CAS成功登录某一Proxy Service后,CAS生成一个PGT对象,缓存在CAS本地,同时将PGT的值(一个UUID字符串)回传给Proxy Service,并保存在Proxy Service里。Proxy Service拿到PGT后,就可以为Target Serviceback-end service)做代理,为其申请PT

·         PGTIOU(全称 Proxy Granting Ticket I Owe You

PGTIOUCAS协议中定义的一种附加票据,它增强了传输、获取PGT的安全性。
PGT的传输与获取的过程:Proxy Service调用CASserviceValidate接口验证ST成功后,CAS首先会访问pgtUrl指向的https url,将生成的 PGTPGTIOU传输给proxy serviceproxy service会以PGTIOUkeyPGTvalue,将其存储在Map中;然后CAS会生成验证ST成功的xml消息,返回给Proxy Servicexml消息中含有PGTIOUproxy service收到Xml消息后,会从中解析出PGTIOU的值,然后以其为key,在map中找出PGT的值,赋值给代表用户信息的Assertion对象的pgtId,同时在map中将其删除。

·         PTProxy Ticket

PT是用户访问Target Serviceback-end service)的票据。如果用户访问的是一个Web应用,则Web应用会要求浏览器提供ST,浏览器就会用cookieCAS获取一个ST,然后就可以访问这个Web应用了。如果用户访问的不是一个Web应用,而是一个C/S结构的应用,因为C/S结构的应用得不到cookie,所以用户不能自己去CAS获取ST,而是通过访问proxy service的接口,凭借proxy servicePGT去获取一个PT,然后才能访问到此应用。 

2TGTSTPGTPT之间关系

       1STTGT签发的。用户在CAS上认证成功后,CAS生成TGT,用TGT签发一个STSTticketGrantingTicket属性值是TGT对象,然后把ST的值redirect到客户应用。

    2PGTST签发的。用户凭借ST去访问Proxy serviceProxy serviceCAS验证ST(同时传递PgtUrl参数给CAS),如果ST验证成功,则CASST签发一个PGTPGT对象里的ticketGrantingTicket是签发STTGT对象。

    3PTPGT签发的。Proxy service代理back-end serviceCAS获取PT的时候,CAS根据传来的pgt参数,获取到PGT对象,然后调用其grantServiceTicket方法,生成一个PT对象。

你可能感兴趣的:(java基础)