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

引言

CAS是耶魯大學(xué)發(fā)起的一個(gè)開(kāi)源單點(diǎn)登錄項(xiàng)目坎炼,也是用的最為廣泛的開(kāi)源項(xiàng)目。對(duì)于學(xué)習(xí)SSO有非常好的參考價(jià)值

什么是單點(diǎn)登錄

單點(diǎn)登錄(Single Sign On),簡(jiǎn)稱為 SSO。多用于多系統(tǒng)共存的環(huán)境下,用戶在一處登錄后绸吸,就不用在其他系統(tǒng)中登錄,最簡(jiǎn)單的單點(diǎn)登入實(shí)現(xiàn)可以完全基于cookie设江,通過(guò)往瀏覽器寫(xiě)帶有登入信息的token來(lái)達(dá)到多點(diǎn)登入的目的锦茁,有興趣的可以自己動(dòng)手實(shí)現(xiàn)一個(gè)

CAS單點(diǎn)登入的實(shí)現(xiàn)

先盜個(gè)圖 :

cas單點(diǎn)登錄.png

從結(jié)構(gòu)上看,分成了三部分:CAS Client叉存,CAS Server码俩,瀏覽器

CAS Client 與受保護(hù)的客戶端應(yīng)用部署在一起,以 Filter 方式保護(hù) Web 應(yīng)用的受保護(hù)資源歼捏,過(guò)濾從客戶端過(guò)來(lái)的每一個(gè)Web請(qǐng)求

下面我將分為兩部分(用戶第一次登錄驗(yàn)證和之后的登錄驗(yàn)證)詳細(xì)解析其登入原理

用戶第一次登錄過(guò)程原理

  1. CAS Client 會(huì)先根據(jù)JSESSIONID(存在瀏覽器cookie中) 來(lái)判斷當(dāng)前訪問(wèn)用戶是否已經(jīng)登錄稿存,如果沒(méi)有JSESSIONID 會(huì)繼續(xù)分析 HTTP 請(qǐng)求中是否包含請(qǐng)求 Service Ticket( ST 上圖中的 Ticket) ,如果沒(méi)有瞳秽,則說(shuō)明該用戶是沒(méi)有經(jīng)過(guò)認(rèn)證的瓣履;于是 CAS Client 會(huì)重定向用戶請(qǐng)求到 CAS Server ,并傳遞 Service (要訪問(wèn)的目的資源地址)
  2. 這時(shí)還沒(méi)有登錄過(guò)CAS Server练俐,進(jìn)入用戶認(rèn)證過(guò)程(返回登入界面)
  3. 如果用戶認(rèn)證成功袖迎,CAS Server 將隨機(jī)產(chǎn)生一個(gè)相當(dāng)長(zhǎng)度、唯一、不可偽造的 Service Ticket 燕锥,并緩存以待將來(lái)驗(yàn)證辜贵,并且重定向用戶到 Service 所在地址(附帶剛才產(chǎn)生的 Service Ticket ) , 并為客戶端瀏覽器設(shè)置一個(gè)Ticket Granted Cookie( TGC,該Cookie設(shè)置的是SSO Server的域名)
  4. CAS Client 在拿到 Service 和新產(chǎn)生的 Ticket 過(guò)后归形,與 CAS Server 通過(guò)拿到的Ticket進(jìn)行身份核實(shí)托慨,以確保 Service Ticket 的合法性。

以上是第一次驗(yàn)證時(shí)基本流程

當(dāng)?shù)诙悟?yàn)證時(shí)分兩種情況

  1. 同一個(gè)服務(wù)再次登錄
    這里瀏覽器cookie中會(huì)有 sessionid连霉,憑借這個(gè)sessionid就不再需要去CAS Server 繼續(xù)認(rèn)證
  2. 另外一個(gè)未登錄過(guò)的服務(wù)登錄
    在上面步驟中的第二歩榴芳,因?yàn)橹耙呀?jīng)在CAS Server 登錄成功過(guò)嗡靡,CAS Server 會(huì)讀取瀏覽器中的 TGC (cookie)跺撼,表明已經(jīng)登入過(guò),就不需要去返回登錄界面了讨彼,直接返回CAS Client 一個(gè)唯一 票據(jù)(ticket)歉井,并進(jìn)入第三歩。這樣就實(shí)現(xiàn)了單點(diǎn)登錄哈误,多點(diǎn)無(wú)需再次手動(dòng)登錄

關(guān)于跨域的實(shí)現(xiàn)

跨域的關(guān)鍵在于瀏覽器端的Cookie:TGC哩至,因?yàn)檫@個(gè)Cookie是設(shè)置在SSO Server端的,也就保證了統(tǒng)一票據(jù)和Client端域名無(wú)關(guān)蜜自。

總結(jié)

cas 單點(diǎn)登錄核心就是 單個(gè)cookie菩貌, N個(gè)session

  • 單個(gè)cookie(TGC)
    在cas為各應(yīng)用登錄時(shí)使用,實(shí)現(xiàn)了只須一次錄入用戶密碼重荠,此cookie只于cas server相關(guān)箭阶,這也是cas可以實(shí)現(xiàn)跨域的關(guān)鍵
  • N個(gè)session
    各應(yīng)用會(huì)創(chuàng)建自己的session表示是否登錄,如已登錄戈鲁,就不會(huì)去CAS Server 去驗(yàn)證TGC

在該協(xié)議中仇参,所有與 CAS Server 的交互均采用 SSL 協(xié)議,以確保 STTGC 的安全性婆殿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诈乒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子婆芦,更是在濱河造成了極大的恐慌怕磨,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件消约,死亡現(xiàn)場(chǎng)離奇詭異肠鲫,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)荆陆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門滩届,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事帜消√耐鳎” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵泡挺,是天一觀的道長(zhǎng)辈讶。 經(jīng)常有香客問(wèn)我,道長(zhǎng)娄猫,這世上最難降的妖魔是什么贱除? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮媳溺,結(jié)果婚禮上月幌,老公的妹妹穿的比我還像新娘。我一直安慰自己悬蔽,他們只是感情好扯躺,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蝎困,像睡著了一般录语。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上禾乘,一...
    開(kāi)封第一講書(shū)人閱讀 50,096評(píng)論 1 291
  • 那天澎埠,我揣著相機(jī)與錄音,去河邊找鬼始藕。 笑死蒲稳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鳄虱。 我是一名探鬼主播弟塞,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拙已!你這毒婦竟也來(lái)了决记?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤倍踪,失蹤者是張志新(化名)和其女友劉穎系宫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體建车,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扩借,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缤至。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潮罪。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嫉到,到底是詐尸還是另有隱情沃暗,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布何恶,位于F島的核電站孽锥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏细层。R本人自食惡果不足惜惜辑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疫赎。 院中可真熱鬧盛撑,春花似錦、人聲如沸虚缎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)实牡。三九已至,卻和暖如春轴合,著一層夾襖步出監(jiān)牢的瞬間创坞,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工受葛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留题涨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓总滩,卻偏偏與公主長(zhǎng)得像纲堵,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闰渔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

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