CAS單點登錄基本概念

1.體系結(jié)構(gòu)

從結(jié)構(gòu)體系看谱煤,CAS 包括兩部分: CAS Server 和 CAS Client 谓厘。

CAS Server:

負責(zé)完成對用戶的認證工作 囚玫,會為用戶簽發(fā)兩個重要的票據(jù):登錄票據(jù)(TGT)和服務(wù)票據(jù)(ST)來實現(xiàn)認證過程, CAS Server需要獨立部署 翻默。

CAS Client:

負責(zé)處理對客戶端受保護資源的訪問請求,需要對請求方進行身份認證時宜咒,重定向到 CAS Server 進行認證。準確地來說把鉴,它以Filter 方式保護受保護的資源故黑。
對于訪問受保護資源的每個 Web 請求,CAS Client 會分析該請求的 Http 請求中是否包含 ServiceTicket(服務(wù)票據(jù)庭砍,由 CAS Server發(fā)出用于標識目標服務(wù))场晶。
CAS Client 與受保護的客戶端應(yīng)用部署在一起。

2.核心票據(jù)

CAS的核心就是其Ticket怠缸,及其在Ticket之上的一系列處理操作诗轻。
CAS的主要票據(jù)有TGT、ST揭北、PGT扳炬、PGTIOU、PT搔体,其中TGT鞠柄、ST是CAS1.0(基礎(chǔ)模式)協(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認證成功后匙握,生成一個TGT對象,放入自己的緩存(Session)陈轿。同時圈纺,CAS生成cookie(叫- TGC,個人理解麦射,其實就是TGT的SessionId)蛾娶,寫入瀏覽器;
  • TGT對象的ID就是cookie的值潜秋,當HTTP再次請求到來時蛔琅,如果傳過來的有CAS生成的cookie,則CAS以此cookie值(SessionId)為key查詢緩存中有無TGT(Session)峻呛。 如果有的話罗售,則說明用戶之前登錄過辜窑,如果沒有,則用戶需要重新登錄寨躁。
TGC (Ticket-granting cookie):

上面提到穆碎,CAS-Server生成TGT放入自己的Session中,而TGC就是這個Session的唯一標識(SessionId)职恳,以Cookie形式放到瀏覽器端所禀,是CAS Server用來明確用戶身份的憑證。

ST(ServiceTicket):
  • ST是CAS為用戶簽發(fā)的訪問某一服務(wù)票據(jù)话肖;
  • 用戶訪問service時北秽,service發(fā)現(xiàn)用戶沒有ST葡幸,則要求用戶去CAS獲取ST最筒;
  • 用戶向CAS發(fā)出獲取ST的請求,如果用戶的請求中包含cookie蔚叨,則CAS會以此cookie值為key查詢緩存中有無TGT床蜘,如果存在TGT,則用此TGT簽發(fā)一個ST蔑水,返回給用戶邢锯;
  • 用戶憑借ST去訪問service,service拿ST去CAS驗證搀别,驗證通過后丹擎,允許用戶訪問資源。
  • 為了保證ST的安全性:ST 是基于隨機生成的歇父,沒有規(guī)律性蒂培。而且,CAS規(guī)定 ST 只能存活一定的時間榜苫,然后 CAS Server 會讓它失效护戳。而且,CAS 協(xié)議規(guī)定ST只能使用一次垂睬,無論 Service Ticket 驗證是否成功媳荒, CASServer 都會清除服務(wù)端緩存中的該 Ticket ,從而可以確保一個 Service Ticket 不被使用兩次驹饺。

3.認證過程

這里用一個終端钳枕,對兩個CAS—Client的三次請求來說明CAS的認證過程,主要是TGT赏壹、TGC么伯、ST等票據(jù)的傳遞,以及如何實現(xiàn)的SSO卡儒。
前兩次請求都是訪問的CAS—Client1田柔,主要來說明TGT俐巴、TGC、ST等票據(jù)的作用硬爆;
然后第三次請求訪問的是CAS—Client2欣舵,主要來說明如何實現(xiàn)的SSO。

Request1:

【第一步】終端第一次訪問CAS—Client1缀磕,AuthenticationFilter會截獲此請求:

  • 首先缘圈,檢測本地Session沒有緩存有用戶信息;
  • 然后袜蚕,檢測到請求信息中沒有ST糟把;
  • 所以,CAS—Client1將請求重定向到CAS—Server牲剃,并傳遞 Service (也就是要訪問的目的資源地址遣疯,以便登錄成功過后轉(zhuǎn)回該地址),
    例:【https://cas:8443/cas/login?service=http0%3A8081%2F

【第二步】終端第一次訪問CAS—Server:

  • CAS—Server檢測到請求信息中沒有TGC凿傅,所以跳轉(zhuǎn)到自己的登錄頁缠犀;
  • 終端輸入用戶名、密碼登錄CAS—Server聪舒,認證成功后辨液,CAS—Server會生成登錄票據(jù)—TGT(集成了用戶信息與ST),并隨機生成一個服務(wù)票據(jù)—ST與CAS會話標識—TGC箱残。
    TGT實際上就是Session滔迈,而TGC就是這標識這個Session存到Cookie中的SessionID;ST即被辑,根據(jù)Service生成Ticket燎悍。
  • 然后,CAS—Server會將Ticket加在url 后面敷待,然后將請求redirect 回客戶web 應(yīng)用间涵,例如URL為【http://192.168.1.90:8081/web1/?ticket=ST-5-Sx6eyvj7cPPCfn0pMZ

【第三步】這時,終端攜帶ticket再次請求CAS—Client1:

  • 這時客戶端的AuthenticationFilter看到ticket 參數(shù)后榜揖,會跳過勾哩,由其后面的TicketValidationFilter 處理;
  • TicketValidationFilter 會利用httpclient工具訪問cas 服務(wù)的/serviceValidate 接口,
    將ticket 举哟、service 都傳到此接口思劳,由此接口驗證ticket 的有效性,即向CAS—Server驗證ST的有效性妨猩。
  • TicketValidationFilter如果得到驗證成功的消息潜叛,就會把用戶信息寫入web 應(yīng)用的session里。至此為止,SSO 會話就建立起來了威兜。
Request2:

上面說了SSO 會話已經(jīng)建立起來了销斟,這時用戶在同一瀏覽器里第二次訪問此web 應(yīng)用(CAS—Client1)時,
AuthenticationFilter會在session 里讀取到用戶信息椒舵,這就代表用戶已成功登錄蚂踊,所以就不會去CAS 認證了。

Request3:

【第一步】與Request1是完全一樣的笔宿,如下:終端第一次訪問CAS—Client2犁钟,AuthenticationFilter會截獲此請求:

  • 首先,檢測本地Session沒有緩存有用戶信息泼橘;
  • 然后涝动,檢測到請求信息中沒有ST,所以炬灭,CAS—Client1將請求重定向到CAS—Server醋粟,并傳遞 Service (也就是要訪問的目的資源地址,以便登錄成功過后轉(zhuǎn)回該地址)担败,
    例:【https://cas:8443/cas/login?service=http0%3A8081%2F

【第二步】然后昔穴,終端第二次訪問CAS—Server:此時镰官,Request中會帶有上次生成的TGC提前,然后根據(jù)TGC(SessionID)去查找是否有對應(yīng)的TGT(Session),如果有泳唠,代表此用戶已成功登錄過狈网,所以此時用戶不必再去登錄頁登錄(SSO的體現(xiàn)),而CAS—Server會直接用找到的TGT簽發(fā)一個ST笨腥,然后重定向到CAS—Client2拓哺,剩下的如Request1中的

【第三步】就完全一樣了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脖母,一起剝皮案震驚了整個濱河市士鸥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谆级,老刑警劉巖烤礁,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肥照,居然都是意外死亡脚仔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門舆绎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鲤脏,“玉大人,你說我怎么就攤上這事×源迹” “怎么了窥突?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長硫嘶。 經(jīng)常有香客問我波岛,道長,這世上最難降的妖魔是什么音半? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任则拷,我火速辦了婚禮,結(jié)果婚禮上曹鸠,老公的妹妹穿的比我還像新娘煌茬。我一直安慰自己,他們只是感情好彻桃,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布坛善。 她就那樣靜靜地躺著,像睡著了一般邻眷。 火紅的嫁衣襯著肌膚如雪眠屎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天肆饶,我揣著相機與錄音改衩,去河邊找鬼。 笑死驯镊,一個胖子當著我的面吹牛葫督,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播板惑,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼橄镜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了冯乘?” 一聲冷哼從身側(cè)響起洽胶,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎裆馒,沒想到半個月后姊氓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡领追,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年他膳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绒窑。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡棕孙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蟀俊,我是刑警寧澤钦铺,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站肢预,受9級特大地震影響矛洞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烫映,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一沼本、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锭沟,春花似錦抽兆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至祝辣,卻和暖如春贴妻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蝙斜。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绢片,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓巢株,卻偏偏與公主長得像槐瑞,于是被迫代替她去往敵國和親困檩。 傳聞我的和親對象是個殘疾皇子悼沿,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. CAS 簡介 1.1. What is CAS 义郑? CAS ( Central Authenti...
    人在碼途閱讀 9,812評論 3 51
  • 主要介紹CAS SSO的認證流程交汤。有關(guān)這方面的內(nèi)容再網(wǎng)上也有很多資料,寫這篇總結(jié)目的一來是自己在理解這塊內(nèi)容的時候...
    spilledyear閱讀 9,828評論 1 17
  • 一、什么是單點登錄施逾? 單點登錄SSO(Single Sign On)說得簡單點就是在一個多系統(tǒng)共存的環(huán)境下汉额,用戶在...
    yljava閱讀 12,277評論 0 13
  • CAS,Central Authentication Service—中央認證服務(wù)妓灌,是Yale 大學(xué)發(fā)起的一個企業(yè)...
    ackier閱讀 1,639評論 0 0
  • 世上有兩種東西最觸動人心斧散,一是老者蹉跎歲月后的慈眉鸡捐,二是孩童未經(jīng)世事前的純粹瞻鹏。 世上有兩種東西最讓人淚目新博,一是對生...
    sS離群索居閱讀 311評論 0 0