CAS單點(diǎn)登錄原理解析

1、基于Cookie的單點(diǎn)登錄的回顧

基于Cookie的單點(diǎn)登錄

基于Cookie的單點(diǎn)登錄核心原理:

  • 將用戶(hù)名密碼加密之后存于Cookie中,之后訪問(wèn)網(wǎng)站時(shí)在過(guò)濾器(filter)中校驗(yàn)用戶(hù)權(quán)限,如果沒(méi)有權(quán)限則從Cookie中取出用戶(hù)名密碼進(jìn)行登錄,讓用戶(hù)從某種意義上覺(jué)得只登錄了一次。
  • 該方式缺點(diǎn)就是多次傳送用戶(hù)名密碼,增加被盜風(fēng)險(xiǎn),以及不能跨域。同時(shí)www.qiandu.commail.qiandu.com同時(shí)擁有登錄邏輯的代碼,如果涉及到修改操作,則需要修改兩處。

2、統(tǒng)一認(rèn)證中心方案原理

在生活中我們也有類(lèi)似的相關(guān)生活經(jīng)驗(yàn),例如你去食堂吃飯,食堂打飯的阿姨(www.qiandu.com)告訴你,不收現(xiàn)金。并且告訴你,你去門(mén)口找換票的(passport.com)換小票。于是你換完票之后,再去找食堂阿姨,食堂阿姨拿著你的票,問(wèn)門(mén)口換票的,這個(gè)票是真的嗎?換票的說(shuō),是真的,于是給你打飯了。

基于上述生活中的場(chǎng)景,我們將基于Cookie的單點(diǎn)登錄改良以后的方案如下:

統(tǒng)一認(rèn)證中心方案

經(jīng)過(guò)分析,Cookie單點(diǎn)登錄認(rèn)證太過(guò)于分散,每個(gè)網(wǎng)站都持有一份登陸認(rèn)證代碼。于是我們將認(rèn)證統(tǒng)一化,形成一個(gè)獨(dú)立的服務(wù)。當(dāng)我們需要登錄操作時(shí),則重定向到統(tǒng)一認(rèn)證中心http://passport.com。于是乎整個(gè)流程就如上圖所示:

  • 第一步:用戶(hù)訪問(wèn)www.qiandu.com。過(guò)濾器判斷用戶(hù)是否登錄,沒(méi)有登錄,則重定向(302)到網(wǎng)站http://passport.com。
  • 第二步:重定向到passport.com,輸入用戶(hù)名密碼。passport.com將用戶(hù)登錄的信息記錄到服務(wù)器的session中。
  • 第三步:passport.com給瀏覽器發(fā)送一個(gè)特殊的憑證,瀏覽器將憑證交給www.qiandu.comwww.qiandu.com則拿著瀏覽器交給他的憑證去passport.com驗(yàn)證憑證是否有效,從而判斷用戶(hù)是否登錄成功。
  • 第四步:登錄成功,瀏覽器與網(wǎng)站之間進(jìn)行正常的訪問(wèn)。

3、耶魯大學(xué)研發(fā)的CAS(Central Authentication Server)方案

下面就以耶魯大學(xué)研發(fā)的CAS為分析依據(jù),分析其工作原理。首先看一下最上層的項(xiàng)目部署圖:

CAS方案

部署項(xiàng)目時(shí)需要部署一個(gè)獨(dú)立的認(rèn)證中心(cas.qiandu.com),以及其他N個(gè)用戶(hù)自己的web服務(wù)。

  • 認(rèn)證中心:也就是cas.qiandu.com,即cas-server。用來(lái)提供認(rèn)證服務(wù),由CAS框架提供,用戶(hù)只需要根據(jù)業(yè)務(wù)實(shí)現(xiàn)認(rèn)證的邏輯即可。
  • 用戶(hù)web項(xiàng)目:只需要在web.xml中配置幾個(gè)過(guò)濾器,用來(lái)保護(hù)資源,過(guò)濾器也是CAS框架提供了,即cas-client,基本不需要改動(dòng)可以直接使用。

3.1 CAS的詳細(xì)登錄流程

CAS登錄流程

上圖是3個(gè)登錄場(chǎng)景,分別為:

  • 第一次訪問(wèn)www.qiandu.com
  • 第二次訪問(wèn)www.qiandu.com
  • 登錄狀態(tài)下第一次訪問(wèn)mail.qiandu.com。

下面就詳細(xì)說(shuō)明上圖中每個(gè)數(shù)字標(biāo)號(hào)做了什么,以及相關(guān)的請(qǐng)求內(nèi)容,響應(yīng)內(nèi)容。

3.2 第一次訪問(wèn)www.qiandu.com

  • 步驟1:用戶(hù)訪問(wèn)http://www.qiandu.com,經(jīng)過(guò)他的第一個(gè)過(guò)濾器(由CAS提供,在web.xml中配置)AuthenticationFilter。

過(guò)濾器全稱(chēng):org.jasig.cas.client.authentication.AuthenticationFilter
主要作用:判斷是否登錄,如果沒(méi)有登錄則重定向到認(rèn)證中心。

  • 步驟2:www.qiandu.com發(fā)現(xiàn)用戶(hù)沒(méi)有登錄,則返回瀏覽器重定向地址。
瀏覽器重定向

首先可以看到我們請(qǐng)求www.qiandu.com,之后瀏覽器返回狀態(tài)碼302,然后讓瀏覽器重定向到cas.qiandu.com并且通過(guò)get的方式添加參數(shù)service,該參數(shù)目的是登錄成功之后會(huì)要重定向回來(lái),因此需要該參數(shù)。并且你會(huì)發(fā)現(xiàn),其實(shí)server的值就是編碼之后的我們請(qǐng)求www.qiandu.com的地址。

  • 步驟3:瀏覽器接收到重定向之后發(fā)起重定向,請(qǐng)求cas.qiandu.com。

  • 步驟4:認(rèn)證中心cas.qiandu.com接收到登錄請(qǐng)求,返回登陸頁(yè)面。

登錄請(qǐng)求處理

上圖就是步驟3的請(qǐng)求,以及步驟4的響應(yīng)。請(qǐng)求的URL是步驟2返回的URL。之后認(rèn)證中心就展示登錄的頁(yè)面,等待用戶(hù)輸入用戶(hù)名密碼。

  • 步驟5:用戶(hù)在cas.qiandu.com的login頁(yè)面輸入用戶(hù)名密碼,提交。

  • 步驟6:服務(wù)器接收到用戶(hù)名密碼,則驗(yàn)證是否有效,驗(yàn)證邏輯可以使用cas-server提供現(xiàn)成的,也可以自己實(shí)現(xiàn)。

驗(yàn)證邏輯

上圖就是步驟5所發(fā)出的訪問(wèn)請(qǐng)求,以及步驟6的響應(yīng)了。當(dāng)cas.qiandu.com即CAS-Server認(rèn)證通過(guò)之后,會(huì)返回給瀏覽器302,重定向的地址就是Referer中的service參數(shù)對(duì)應(yīng)的值。后邊并通過(guò)get的方式挾帶了一個(gè)ticket令牌,這個(gè)ticket就是ST(數(shù)字3處)。同時(shí)會(huì)在Cookie中設(shè)置一個(gè)CASTGC,該cookie是網(wǎng)站cas.qiandu.com的cookie,只有訪問(wèn)這個(gè)網(wǎng)站才會(huì)攜帶這個(gè)cookie過(guò)去。

Cookie中的CAS TGC:向cookie中添加該值的目的是當(dāng)下次訪問(wèn)cas.qiandu.com時(shí),瀏覽器將Cookie中的TGC攜帶到服務(wù)器,服務(wù)器根據(jù)這個(gè)TGC,查找與之對(duì)應(yīng)的TGT,從而判斷用戶(hù)是否登錄過(guò)了,是否需要展示登錄頁(yè)面。TGT與TGC的關(guān)系就像SESSION與Cookie中SESSIONID的關(guān)系。

  • TGT:Ticket Granted Ticket(俗稱(chēng)大令牌,或者說(shuō)票根,他可以簽發(fā)ST)
  • TGC:Ticket Granted Cookie(cookie中的value),存在Cookie中,根據(jù)他可以找到TGT。
  • ST:Service Ticket (小令牌),是TGT生成的,默認(rèn)是用一次就生效了。也就是上面數(shù)字3處的ticket值。
  • 步驟7:瀏覽器從cas.qiandu.com哪里拿到ticket之后,就根據(jù)指示重定向到www.qiandu.com,請(qǐng)求的url就是上面返回的url。
重定向URL
  • 步驟8:www.qiandu.com在過(guò)濾器中會(huì)取到ticket的值,然后通過(guò)http方式調(diào)用cas.qiandu.com驗(yàn)證該ticket是否是有效的。
  • 步驟9:cas.qiandu.com接收到ticket之后,驗(yàn)證,驗(yàn)證通過(guò)返回結(jié)果告訴www.qiandu.com該ticket有效。
  • 步驟10:www.qiandu.com接收到cas-server的返回,知道了用戶(hù)合法,展示相關(guān)資源到用戶(hù)瀏覽器上。
用戶(hù)訪問(wèn)

至此,第一次訪問(wèn)的整個(gè)流程結(jié)束,其中步驟8與步驟9的環(huán)節(jié)是通過(guò)代碼調(diào)用的,并不是瀏覽器發(fā)起,所以沒(méi)有截取到報(bào)文。

3.3 第二次訪問(wèn)www.qiandu.com

上面以及訪問(wèn)過(guò)一次了,當(dāng)?shù)诙卧L問(wèn)的時(shí)候發(fā)生了什么呢?

  • 步驟11:用戶(hù)發(fā)起請(qǐng)求,訪問(wèn)www.qiandu.com時(shí)會(huì)經(jīng)過(guò)cas-client,也就是過(guò)濾器,因?yàn)榈谝淮卧L問(wèn)成功之后 www.qiandu.com中會(huì)在session中記錄用戶(hù)信息,因此這里直接就通過(guò)了,不用驗(yàn)證了。
  • 步驟12:用戶(hù)通過(guò)權(quán)限驗(yàn)證,瀏覽器返回正常資源。

3.4 訪問(wèn)mail.qiandu.com

  • 步驟13:用戶(hù)在www.qiandu.com正常上網(wǎng),突然想訪問(wèn)mail.qiandu.com,于是發(fā)起訪問(wèn)mail.qiandu.com的請(qǐng)求;
  • 步驟14:mail.qiandu.com接收到請(qǐng)求,發(fā)現(xiàn)第一次訪問(wèn),于是給他一個(gè)重定向的地址,讓他去找認(rèn)證中心登錄。
重定向認(rèn)證

上圖可以看到,用戶(hù)請(qǐng)求mail.qiandu.com,然后返回給他一個(gè)網(wǎng)址,狀態(tài)302重定向,service參數(shù)就是回來(lái)的地址。

  • 步驟15:瀏覽器根據(jù)步驟14返回的地址,發(fā)起重定向,因?yàn)橹霸L問(wèn)過(guò)一次了,因此這次會(huì)攜帶上次返回的Cookie:TGC到認(rèn)證中心。

  • 步驟16:認(rèn)證中心收到請(qǐng)求,發(fā)現(xiàn)TGC對(duì)應(yīng)了一個(gè)TGT,于是用TGT簽發(fā)一個(gè)ST,并且返回給瀏覽器,讓他重定向到mail.qiandu.com

重定向到目標(biāo)網(wǎng)址

可以發(fā)現(xiàn)請(qǐng)求的時(shí)候是攜帶Cookie:CASTGC的,響應(yīng)的就是一個(gè)地址加上TGT簽發(fā)的ST也就是ticket。

  • 步驟17:瀏覽器根據(jù)步驟16返回的網(wǎng)址發(fā)起重定向。
  • 步驟18:mail.qiandu.com獲取ticket去認(rèn)證中心驗(yàn)證是否有效。
  • 步驟19:認(rèn)證成功,返回在mail.qiandu.com的session中設(shè)置登錄狀態(tài),下次就直接登錄。
  • 步驟20:認(rèn)證成功之后就反正用想要訪問(wèn)的資源了。
訪問(wèn)資源

至此,CAS登錄的整個(gè)過(guò)程就完畢了。

注: 本文轉(zhuǎn)載自網(wǎng)絡(luò), 用于個(gè)人學(xué)習(xí)與知識(shí)分享, 無(wú)其他商業(yè)用途。如有侵權(quán), 請(qǐng)及時(shí)與我進(jìn)行溝通,我將第一時(shí)間進(jìn)行刪除。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,716評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,746評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,991評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,706評(píng)論 6 413
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 56,036評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,203評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,725評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,451評(píng)論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,677評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,857評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,266評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,606評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,407評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,643評(píng)論 2 380

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

  • 基于Cookie的單點(diǎn)登錄核心原理: 將用戶(hù)名密碼加密之后存于Cookie中,之后訪問(wèn)網(wǎng)站時(shí)在過(guò)濾器(filter...
    lbyang閱讀 2,904評(píng)論 0 4
  • 引言 CAS是耶魯大學(xué)發(fā)起的一個(gè)開(kāi)源單點(diǎn)登錄項(xiàng)目,也是用的最為廣泛的開(kāi)源項(xiàng)目。對(duì)于學(xué)習(xí)SSO有非常好的參考價(jià)值 什...
    香芋牛奶面包閱讀 4,971評(píng)論 2 10
  • 1. CAS 簡(jiǎn)介 1.1. What is CAS ? CAS ( Central Authenti...
    人在碼途閱讀 9,821評(píng)論 3 51
  • 一、什么是單點(diǎn)登錄? 單點(diǎn)登錄SSO(Single Sign On)說(shuō)得簡(jiǎn)單點(diǎn)就是在一個(gè)多系統(tǒng)共存的環(huán)境下,用戶(hù)在...
    yljava閱讀 12,304評(píng)論 0 13
  • 主要介紹CAS SSO的認(rèn)證流程。有關(guān)這方面的內(nèi)容再網(wǎng)上也有很多資料,寫(xiě)這篇總結(jié)目的一來(lái)是自己在理解這塊內(nèi)容的時(shí)候...
    spilledyear閱讀 9,840評(píng)論 1 17