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

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

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

二羽资、何謂CAS

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

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

ST(Service Ticket):服務(wù)票據(jù)翰萨,服務(wù)的唯一標(biāo)識(shí)碼脏答,由TGT生成ST,返回給用戶缨历,接著拿著生成的ST去訪問(wèn)service以蕴,service又會(huì)把ST拿到CAS系統(tǒng)去驗(yàn)證,驗(yàn)證通過(guò)后才允許用戶訪問(wèn)該資源辛孵。

TGC(Ticket Granting Cookie):CAS系統(tǒng)用來(lái)識(shí)別用戶身份的憑證丛肮。

TGT(Ticket Grangting Ticket):授權(quán)票據(jù),獲取這TGT之后才能申請(qǐng)服務(wù)票據(jù)(ST)魄缚,用戶如果在CAS系統(tǒng)認(rèn)證成功之后宝与,就會(huì)生成TGC寫(xiě)入瀏覽器,同時(shí)也生成一個(gè)TGT冶匹,TGT對(duì)象的id就是cookie值习劫。之后每次請(qǐng)求過(guò)來(lái)通過(guò)此cookie來(lái)從緩存獲取TGT,就不用提交身份認(rèn)證信息(Credentials)嚼隘。

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

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

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

1、第一次訪問(wèn)系統(tǒng)A時(shí)墓懂,沒(méi)有票據(jù)(ST)焰宣,也沒(méi)有session,會(huì)重定向到CAS服務(wù)器捕仔,要求用戶輸入用戶名和密碼匕积,之后CAS向?yàn)g覽器寫(xiě)入TGC,同時(shí)生成TGT保存到緩存榜跌,CAS服務(wù)器會(huì)根據(jù)TGT生成ST闪唆,然后CAS會(huì)重定向到給應(yīng)用系統(tǒng)A,CAS將這個(gè)ST和成功登錄的用戶斜做,以及服務(wù)聯(lián)系在一起苞氮。這個(gè)ST使用次數(shù)(numberOfUses)和有效時(shí)間(timeToKill)是可配置的湾揽,超過(guò)設(shè)置的次數(shù)或者超過(guò)有效時(shí)間就會(huì)失效瓤逼。

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

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

4潜必、第一次訪問(wèn)另一個(gè)應(yīng)用系統(tǒng)B靴姿,也是沒(méi)有票據(jù)(ST),也沒(méi)有session磁滚,會(huì)再次被重定向到CAS系統(tǒng)佛吓,CAS系統(tǒng)會(huì)去獲得TGC,如果該TGC沒(méi)有失效垂攘,則拿到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陨仅、再去訪問(wèn)系統(tǒng)A時(shí)津滞,沒(méi)有票據(jù)耕陷,因?yàn)槠睋?jù)只能用一次,但是我們有session据沈,所以不用跳轉(zhuǎn)到CAS去簽發(fā)票據(jù)了哟沫,直接允許用戶訪問(wèn)。

6锌介、用戶登出的時(shí)候嗜诀,CAS系統(tǒng)接受請(qǐng)求后,會(huì)檢測(cè)用戶的TGC孔祸,把對(duì)應(yīng)的session清除隆敢,同時(shí)會(huì)找到所有通過(guò)該TGC進(jìn)行SSO登錄的應(yīng)用服務(wù)器URL提交請(qǐng)求,所有的回調(diào)請(qǐng)求中崔慧,包含一個(gè)參數(shù)logoutRequest拂蝎,內(nèi)容格式如下:

@NOT_USED@

[SESSIONIDENTIFIER]

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

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

現(xiàn)有兩個(gè)系統(tǒng)悼泌,一個(gè)是techops應(yīng)用系統(tǒng),是web界面的管理控制臺(tái)夹界,通過(guò)techops錄入資源馆里,角色,做權(quán)限分配可柿。

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

1营密、我在本地部署起來(lái)兩個(gè)系統(tǒng)之后,第一次訪問(wèn)techops應(yīng)用系統(tǒng)http://localhost:8143/techops/永票,此時(shí)我們沒(méi)有票據(jù)卵贱,也沒(méi)有session會(huì)重定向到CAS系統(tǒng)。

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

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

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


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

3畅蹂、下次我們?cè)偃ピL問(wèn)http://localhost:8143/techops健无,就不會(huì)去簽發(fā)ticket了,此時(shí)techops已經(jīng)根據(jù)從CAS返回的用戶信息將session創(chuàng)建起來(lái)液斜,我們的session是已經(jīng)有信息了累贤,瀏覽器后臺(tái)是看不到重定向到CAS系統(tǒng)去驗(yàn)證這些流程了。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市检访,隨后出現(xiàn)的幾起案子始鱼,更是在濱河造成了極大的恐慌,老刑警劉巖烛谊,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件风响,死亡現(xiàn)場(chǎng)離奇詭異嘉汰,居然都是意外死亡丹禀,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)鞋怀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)双泪,“玉大人,你說(shuō)我怎么就攤上這事密似”好” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵残腌,是天一觀的道長(zhǎng)村斟。 經(jīng)常有香客問(wèn)我,道長(zhǎng)抛猫,這世上最難降的妖魔是什么蟆盹? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮闺金,結(jié)果婚禮上逾滥,老公的妹妹穿的比我還像新娘。我一直安慰自己败匹,他們只是感情好寨昙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布讥巡。 她就那樣靜靜地躺著,像睡著了一般舔哪。 火紅的嫁衣襯著肌膚如雪欢顷。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,610評(píng)論 1 305
  • 那天捉蚤,我揣著相機(jī)與錄音吱涉,去河邊找鬼。 笑死外里,一個(gè)胖子當(dāng)著我的面吹牛怎爵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盅蝗,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鳖链,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了墩莫?” 一聲冷哼從身側(cè)響起芙委,我...
    開(kāi)封第一講書(shū)人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狂秦,沒(méi)想到半個(gè)月后灌侣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡裂问,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年侧啼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堪簿。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡痊乾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出椭更,到底是詐尸還是另有隱情哪审,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布虑瀑,位于F島的核電站湿滓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏舌狗。R本人自食惡果不足惜叽奥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望把夸。 院中可真熱鬧而线,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至誓竿,卻和暖如春磅网,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背筷屡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工涧偷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毙死。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓燎潮,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親扼倘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子确封,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

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