日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CAS证书分析(2)

發(fā)布時(shí)間:2023/12/10 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CAS证书分析(2) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

CAS的核心就是其Ticket,及其在Ticket之上的一系列處理操作。CAS的主要票據(jù)有TGT、ST、PGT、PGTIOU、PT,其中TGT、ST是CAS1.0協(xié)議中就有的票據(jù),PGT、PGTIOU、PT是CAS2.0協(xié)議中有的票據(jù)。


一 名詞解釋

  • TGT(Ticket Grangting Ticket)

TGT是CAS為用戶簽發(fā)的登錄票據(jù),擁有了TGT,用戶就可以證明自己在CAS成功登錄過。TGT封裝了Cookie值以及此Cookie值對應(yīng)的用戶信息。用戶在CAS認(rèn)證成功后,CAS生成cookie,寫入瀏覽器,同時(shí)生成一個(gè)TGT對象,放入自己的緩存,TGT對象的ID就是cookie的值。當(dāng)HTTP再次請求到來時(shí),如果傳過來的有CAS生成的cookie,則CAS以此cookie值為key查詢緩存中有無TGT ,如果有的話,則說明用戶之前登錄過,如果沒有,則用戶需要重新登錄。


  • ST(Service Ticket)

ST是CAS為用戶簽發(fā)的訪問某一service的票據(jù)。用戶訪問service時(shí),service發(fā)現(xiàn)用戶沒有ST,則要求用戶去CAS獲取ST。用戶向CAS發(fā)出獲取ST的請求,如果用戶的請求中包含cookie,則CAS會以此cookie值為key查詢緩存中有無TGT,如果存在TGT,則用此TGT簽發(fā)一個(gè)ST,返回給用戶。用戶憑借ST去訪問service,service拿ST去CAS驗(yàn)證,驗(yàn)證通過后,允許用戶訪問資源。


  • PGT(Proxy Granting Ticket)

Proxy Service的代理憑據(jù)。用戶通過CAS成功登錄某一Proxy Service后,CAS生成一個(gè)PGT對象,緩存在CAS本地,同時(shí)將PGT的值(一個(gè)UUID字符串)回傳給Proxy Service,并保存在Proxy Service里。Proxy Service拿到PGT后,就可以為Target Service(back-end service)做代理,為其申請PT。


  • PGTIOU(Proxy Granting Ticket IOU)

PGTIOU是CAS協(xié)議中定義的一種附加票據(jù),它增強(qiáng)了傳輸、獲取PGT的安全性。
PGT的傳輸與獲取的過程:Proxy Service調(diào)用CAS的serviceValidate接口驗(yàn)證ST成功后,CAS首先會訪問pgtUrl指向的https url,將生成的 PGT及PGTIOU傳輸給proxy service,proxy service會以PGTIOU為key,PGT為value,將其存儲在Map中;然后CAS會生成驗(yàn)證ST成功的xml消息,返回給Proxy Service,xml消息中含有PGTIOU,proxy service收到Xml消息后,會從中解析出PGTIOU的值,然后以其為key,在map中找出PGT的值,賦值給代表用戶信息的Assertion對象的pgtId,同時(shí)在map中將其刪除。


  • PT(Proxy Ticket)

PT是用戶訪問Target Service(back-end service)的票據(jù)。如果用戶訪問的是一個(gè)Web應(yīng)用,則Web應(yīng)用會要求瀏覽器提供ST,瀏覽器就會用cookie去CAS獲取一個(gè)ST,然后就可以訪問這個(gè)Web應(yīng)用了。如果用戶訪問的不是一個(gè)Web應(yīng)用,而是一個(gè)C/S結(jié)構(gòu)的應(yīng)用,因?yàn)镃/S結(jié)構(gòu)的應(yīng)用得不到cookie,所以用戶不能自己去CAS獲取ST,而是通過訪問proxy service的接口,憑借proxy service的PGT去獲取一個(gè)PT,然后才能訪問到此應(yīng)用。


二 代碼解析



? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?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協(xié)議的實(shí)現(xiàn)中,PGT是由ST簽發(fā)的,調(diào)用的就是ServiceTicket的grantTicketGrantingTicket方法。方法返回的TicketGrantingTicket對象,表征的是一個(gè)PGT對象,其中的ticketGrantingTicket屬性的值是簽發(fā)ST的TGT對象。


  • TicketGrantingTicket 的 expire方法

方法聲明:void expire()
方法描述:
在CAS的logout接口實(shí)現(xiàn)中,要調(diào)用TGT對象的expire方法,然后會在緩存中清除此TGT對象。
expire方法的內(nèi)容:循環(huán)遍歷 services 中的Service對象,調(diào)用其logoutOfService方法。具體Service實(shí)現(xiàn)類中的logoutOfService方法的實(shí)現(xiàn),要通知具體的應(yīng)用,客戶要退出。

TGT、ST、PGT、PT之間關(guān)系的總結(jié)


1:ST是TGT簽發(fā)的。用戶在CAS上認(rèn)證成功后,CAS生成TGT,用TGT簽發(fā)一個(gè)ST,ST的ticketGrantingTicket屬性值是TGT對象,然后把ST的值redirect到客戶應(yīng)用。


2:PGT是ST簽發(fā)的。用戶憑借ST去訪問Proxy service,Proxy service去CAS驗(yàn)證ST(同時(shí)傳遞PgtUrl參數(shù)給CAS),如果ST驗(yàn)證成功,則CAS用ST簽發(fā)一個(gè)PGT,PGT對象里的ticketGrantingTicket是簽發(fā)ST的TGT對象。


3:PT是PGT簽發(fā)的。Proxy service代理back-end service去CAS獲取PT的時(shí)候,CAS根據(jù)傳來的pgt參數(shù),獲取到PGT對象,然后調(diào)用其grantServiceTicket方法,生成一個(gè)PT對象。



? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TGT、ST、PGT、PT之間的關(guān)聯(lián)關(guān)系


注:如果本文中介紹的 Ticket 概念不詳細(xì),請參考本人的另一篇文章 CAS 總結(jié)之協(xié)議分析篇,里面的動(dòng)畫演示比較清楚地表達(dá)了 Client 、 Service 、 CAS 三者之間的交互。


轉(zhuǎn)載于:https://blog.51cto.com/magina/1395419

總結(jié)

以上是生活随笔為你收集整理的CAS证书分析(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。