CAS實(shí)現(xiàn)單點(diǎn)登錄(SSO)過程淺析

一、何謂單點(diǎn)登錄

單點(diǎn)登錄(Single Sign On),簡稱為SSO,簡單理解就是在多個應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。

二、何謂CAS

CAS(Central Authentication Service)是耶魯大學(xué)的一個開源項(xiàng)目,旨在為web應(yīng)用系統(tǒng)提供一種可靠的單點(diǎn)登錄解決方案。采用CAS最大的是從安全性角度來考慮的,用戶在CAS錄入用戶名和密碼之后通過ticket進(jìn)行認(rèn)證,不會在網(wǎng)上傳輸密碼,保證安全性。

三、CAS中的關(guān)鍵詞理解

ST(Service Ticket):服務(wù)票據(jù),服務(wù)的唯一標(biāo)識碼,由TGT生成ST,返回給用戶,接著拿著生成的ST去訪問service,service又會把ST拿到CAS系統(tǒng)去驗(yàn)證,驗(yàn)證通過后才允許用戶訪問該資源。

TGC(Ticket Granting Cookie):CAS系統(tǒng)用來識別用戶身份的憑證。

TGT(Ticket Grangting Ticket):授權(quán)票據(jù),獲取這TGT之后才能申請服務(wù)票據(jù)(ST),用戶如果在CAS系統(tǒng)認(rèn)證成功之后,就會生成TGC寫入瀏覽器,同時也生成一個TGT,TGT對象的id就是cookie值。之后每次請求過來通過此cookie來從緩存獲取TGT,就不用提交身份認(rèn)證信息(Credentials)。

Session:各個應(yīng)用系統(tǒng)會創(chuàng)建自己的session表示是否登錄,而這里的每個session都是ST驗(yàn)證通過之后組裝生成的。

四、實(shí)現(xiàn)原理

假設(shè)我們現(xiàn)在有應(yīng)用系統(tǒng)A、應(yīng)用系統(tǒng)B、CAS認(rèn)證系統(tǒng)

1、第一次訪問系統(tǒng)A時,沒有票據(jù)(ST),也沒有session,會重定向到CAS服務(wù)器,要求用戶輸入用戶名和密碼,之后CAS向?yàn)g覽器寫入TGC,同時生成TGT保存到緩存,CAS服務(wù)器會根據(jù)TGT生成ST,然后CAS會重定向到給應(yīng)用系統(tǒng)A,CAS將這個ST和成功登錄的用戶,以及服務(wù)聯(lián)系在一起。這個ST使用次數(shù)(numberOfUses)和有效時間(timeToKill)是可配置的,超過設(shè)置的次數(shù)或者超過有效時間就會失效。

2、應(yīng)用系統(tǒng)A收到這個ST之后,它并不知道這個用戶已經(jīng)登錄成功,就通過將ST傳遞給一個校驗(yàn)URL,校驗(yàn)URL拿到Cas系統(tǒng)去驗(yàn)證,CAS通過驗(yàn)證之后返回用戶信息,并且將ST作廢。

3、應(yīng)用系統(tǒng)A根據(jù)從CAS收到的用戶信息將session創(chuàng)建起來,這樣我們的應(yīng)用就擁有了一個自己的session。

4、第一次訪問另一個應(yīng)用系統(tǒng)B,也是沒有票據(jù)(ST),也沒有session,會再次被重定向到CAS系統(tǒng),CAS系統(tǒng)會去獲得TGC,如果該TGC沒有失效,則拿到TGT生成ST給用戶重定向到系統(tǒng)B,系統(tǒng)B拿到ST之后再去CAS系統(tǒng)驗(yàn)證(同應(yīng)用系統(tǒng)B的驗(yàn)證方式),驗(yàn)證成功則創(chuàng)建session;如果TGC失效,那么用戶還是要重新認(rèn)證。

5、再去訪問系統(tǒng)A時,沒有票據(jù),因?yàn)槠睋?jù)只能用一次,但是我們有session,所以不用跳轉(zhuǎn)到CAS去簽發(fā)票據(jù)了,直接允許用戶訪問。

6、用戶登出的時候,CAS系統(tǒng)接受請求后,會檢測用戶的TGC,把對應(yīng)的session清除,同時會找到所有通過該TGC進(jìn)行SSO登錄的應(yīng)用服務(wù)器URL提交請求,所有的回調(diào)請求中,包含一個參數(shù)logoutRequest,內(nèi)容格式如下:

@NOT_USED@

[SESSIONIDENTIFIER]

所有收到請求的應(yīng)用服務(wù)器會解析這個參數(shù),取得sessionId,根據(jù)這個Id取得session后,把session清除。

四、列舉點(diǎn)融網(wǎng)統(tǒng)一驗(yàn)證中心后端的一個例子

現(xiàn)有兩個系統(tǒng),一個是techops應(yīng)用系統(tǒng),是web界面的管理控制臺,通過techops錄入資源,角色,做權(quán)限分配。

另一個是cas系統(tǒng),即我們的單點(diǎn)登錄系統(tǒng),各個子應(yīng)用系統(tǒng)通過cas做sso認(rèn)證。

1、我在本地部署起來兩個系統(tǒng)之后,第一次訪問techops應(yīng)用系統(tǒng)http://localhost:8143/techops/,此時我們沒有票據(jù),也沒有session會重定向到CAS系統(tǒng)。

CAS統(tǒng)一認(rèn)證登錄界面如下,我們看到的鏈接是:http://localhost:8142/cas/login?service=http%3A%2F%2Flocalhost%3A8143%2Ftechops%2Flogin%2Fcas

后面加入了一個service,通過decodeURIComponent('http%3A%2F%2Flocalhost%3A8143%2Ftechops%2Flogin%2Fcas');解析之后的樣子:"http://localhost:8143/techops/login/cas",就是在用戶登錄成功之后跳轉(zhuǎn)的URL。

2、我們輸入用戶名和密碼,登錄成功之后,會跳轉(zhuǎn)到techops系統(tǒng),攜帶了一個ticket = ST-1-oYYmrbiaZ7LnFlA77rfr-cas01.dianrong.com(隨機(jī)生成),同時我們也看到了CAS向?yàn)g覽器寫入了TGC。


techops系統(tǒng)界面如下:

3、下次我們再去訪問http://localhost:8143/techops,就不會去簽發(fā)ticket了,此時techops已經(jīng)根據(jù)從CAS返回的用戶信息將session創(chuàng)建起來,我們的session是已經(jīng)有信息了,瀏覽器后臺是看不到重定向到CAS系統(tǒng)去驗(yàn)證這些流程了。

本文作者:鄧海波,90后IT小猿一枚,平時喜歡看看電影玩玩LOL。目前就職于點(diǎn)融成都分公司架構(gòu)團(tuán)隊(duì),軟件開發(fā)工程師。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容