CAS单点登入登出原理
CAS
集中式認(rèn)證服務(wù)(Central Authentication Service,CAS),單點(diǎn)登錄協(xié)議,允許一個(gè)用戶訪問多個(gè)應(yīng)用程序,而只需要提供一次憑證。
具體實(shí)現(xiàn)框架有:OAuth2,Shiro等。
普通CAS1.0
登入詳細(xì)流程
流程解析:
(1-2) 用戶第一次通過瀏覽器Browser訪問受保護(hù)的應(yīng)用系統(tǒng)app1,應(yīng)用系統(tǒng)app1發(fā)現(xiàn)訪問請(qǐng)求中沒有JSESSIONID or ST(service ticket) ,要求Browser重定向去CAS service獲取ST;
在每個(gè)受保護(hù)的應(yīng)用系統(tǒng)上都部署有CAS client,邏輯上與應(yīng)用系統(tǒng)獨(dú)立,物理上與應(yīng)用系統(tǒng)部署在一起,實(shí)現(xiàn)上通過過濾器filter的方式保護(hù)應(yīng)用系統(tǒng),CAS client主要提供兩大塊功能:
AuthenticationFilter:負(fù)責(zé)校驗(yàn)用戶是否已認(rèn)證
TicketValidationFilter:負(fù)責(zé)校驗(yàn)ST的合法性
應(yīng)用系統(tǒng)app1通過JSESSIONID or ST判斷用戶有沒有登入:先判斷JSESSIONID,再判斷ST;
(3) 瀏覽器Browser重定向去CAS service獲取ST;
(4-5) CAS service發(fā)現(xiàn)TGC(ticket granting cookie)為空 or 以TGC為key的session不存在,返回Browser登錄表單;
(6) 瀏覽器Browser給用戶展示登錄頁(yè)面;
(7-8) 用戶輸入用戶名密碼等登錄信息后,Browser將登錄信息送給CAS service;
(9-11) CAS service根據(jù)用戶登錄信息進(jìn)行驗(yàn)證,如果驗(yàn)證通過,CAS service就會(huì)創(chuàng)建:TGC(ticket granting cookie)、TGT(ticket granting ticket,票根),并將以TGC為key,TGT為value創(chuàng)建SSO(Single-SignOn) session緩存在CAS service,最后根據(jù)TGT創(chuàng)建ST(service ticket,票據(jù));最后TGC和ST返回給Browser;
為了保證ST的安全性:ST 是基于隨機(jī)生成的,沒有規(guī)律性。而且,CAS規(guī)定 ST 只能存活一定的時(shí)間,然后 CAS service 會(huì)讓它失效。而且,CAS 協(xié)議規(guī)定ST只能使用一次,無論ST驗(yàn)證是否成功, CAS service 都會(huì)清除服務(wù)端緩存中的該ST ,從而可以確保一個(gè)ST不被使用兩次。
為什么不能用TGC代替ST,即為什么還需要由TGT另外生成一個(gè)ST?
如果有TGC代替ST,為了跨域,在第11步重定向時(shí)勢(shì)必要將TGC作為URL一部分代替ST,這樣TGC直接暴露出來,且TGC有效期相對(duì)較長(zhǎng),攻擊者完全可以取得這個(gè)TGC去另外受保護(hù)的應(yīng)用系統(tǒng)獲取資源,甚至于可以將這個(gè)TGC記錄下來,在瀏覽器Browser退出,TGC刪除但是CAS service SSO session未失效的情況下,拿著記錄下來的TGC再去獲取受保護(hù)應(yīng)用系統(tǒng)的訪問權(quán)限,這也是ST要設(shè)置只能使用一次的原因。
CAS service主要的是KDC(Key Distribution Center,密鑰分發(fā)中心),而KDC包括:
AS(Authentication Service,認(rèn)證服務(wù)):根據(jù)用戶登入信息,進(jìn)行登入操作,發(fā)放TGT
TGS(Ticket Granting Service,票據(jù)授受服務(wù)):根據(jù)TGT,發(fā)放ST
(12) Browser收到TGC后設(shè)置cookie,并帶著ST再次請(qǐng)求應(yīng)用系統(tǒng)app1;
從這里看到,TGT是依靠TGC來索引的,而TGC cookie一般是指定時(shí)間or關(guān)閉瀏覽器Browser時(shí)刪除,而一旦TGC刪除,TGT也遺失了,因此,為節(jié)約CAS service緩存,可以定時(shí)刪除迷失的TGT SSO session。
(13) 受保護(hù)的應(yīng)用系統(tǒng)app1拿著ST去CAS service驗(yàn)證ST的合法性;
這里CAS client的TicketValidationFilter起作用
(14) CAS service驗(yàn)證ST,返回驗(yàn)證結(jié)果,認(rèn)證主體和相關(guān)屬性(包括后面的JSESSIONID);
(15) 應(yīng)用系統(tǒng)app1確認(rèn)ST校驗(yàn)通過后,創(chuàng)建本次連接的session,并讓Browser設(shè)置cookie JSESSIONID;
認(rèn)證成功后創(chuàng)建應(yīng)用session的目的是后面用戶訪問該應(yīng)用無需再次登錄及再次去CAS service中驗(yàn)證的必要,從另一方面來說,在應(yīng)用系統(tǒng)上建立應(yīng)用session也是必要的,因?yàn)镾T是CAS service重定向帶過來的,后面Browser訪問時(shí)沒有ST,也限制了ST最多只使用一次,因此必須有一個(gè)東西來在Browser和應(yīng)用系統(tǒng)間證明用戶的登入,這個(gè)東西就是應(yīng)用session及其JSESSIONID。
(16) Browser設(shè)置應(yīng)用系統(tǒng)app1本次連接訪問的cookie JSESSIONID后,帶著JSESSIONID cookie再去訪問應(yīng)用系統(tǒng)app1;
(17-18) 應(yīng)用系統(tǒng)app1校驗(yàn)JSESSIONID通過,返回受保護(hù)的資源;
(19) 用戶成功看到受保護(hù)的系統(tǒng)頁(yè)面;
(20-21) 用戶第二次訪問受保護(hù)的應(yīng)用系統(tǒng)app1時(shí),Browser帶著cookie JSESSIONID請(qǐng)求app1;
(22-23) 應(yīng)用系統(tǒng)app1校驗(yàn)JSESSIONID通過,返回受保護(hù)的資源;
(24) 用戶成功再次看到受保護(hù)的系統(tǒng)頁(yè)面;
(25-27) 用戶第一次訪問受保護(hù)的應(yīng)用系統(tǒng)app2時(shí),應(yīng)用系統(tǒng)app2發(fā)現(xiàn)訪問請(qǐng)求中沒有JSESSIONID or ST,要求Browser重定向去CAS service獲取ST;
(28) 瀏覽器Browser帶著cookie TGC重定向去CAS service獲取ST;
(29-30) CAS service發(fā)現(xiàn)以TGC為key的session TGT存在,且TGT合法有效,則根據(jù)TGT創(chuàng)建ST,并將ST返回給Browser;
(31) Browser帶著ST再次請(qǐng)求應(yīng)用系統(tǒng)app2;
(32-34) 受保護(hù)的應(yīng)用系統(tǒng)app2拿著ST去CAS service驗(yàn)證ST的合法性;CAS service驗(yàn)證ST,返回驗(yàn)證結(jié)果,認(rèn)證主體和相關(guān)屬性(包括后面的JSESSIONID); 應(yīng)用系統(tǒng)app1確認(rèn)ST校驗(yàn)通過后,創(chuàng)建本次連接的session,并讓Browser設(shè)置cookie JSESSIONID;
(35) Browser設(shè)置應(yīng)用系統(tǒng)app2本次連接訪問的cookie JSESSIONID后,帶著JSESSIONID cookie再去訪問應(yīng)用系統(tǒng)app2;
(36-37) 應(yīng)用系統(tǒng)app2校驗(yàn)JSESSIONID通過,返回受保護(hù)的資源;
(38) 用戶成功看到受保護(hù)的系統(tǒng)頁(yè)面;
CAS所有的請(qǐng)求都需要在有SSL保護(hù)的HTTS下進(jìn)行才安全。
登出流程
代理CAS2.0
未完待續(xù)~~
參考:
如何設(shè)計(jì)一個(gè)通用的權(quán)限管理系統(tǒng)?說的太詳細(xì)了!
cas系列(一)–cas單點(diǎn)登錄基本原理
CAS單點(diǎn)登錄原理(包含詳細(xì)流程,講得很透徹,耐心看下去一定能看明白!)
【SSO單點(diǎn)系列】(6):CAS4.0 單點(diǎn)流程序列圖(中文版)以及相關(guān)術(shù)語(yǔ)解釋(TGT、ST、PGT、PT、PGTIOU)
CAS認(rèn)證原理、TGT/ST、流程介紹
CAS-認(rèn)證流程詳解
Kerberos身份驗(yàn)證流程
kerberos 認(rèn)證學(xué)習(xí)
kerberos的as tgs cs認(rèn)證基本原理
總結(jié)
以上是生活随笔為你收集整理的CAS单点登入登出原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 摩杰盒子助手V1.0
- 下一篇: 巫妖王51单片机开发板配套视频课程-朱有