CAS 單點登錄原理解析

引言

CAS是耶魯大學發起的一個開源單點登錄項目,也是用的最為廣泛的開源項目。對于學習SSO有非常好的參考價值

什么是單點登錄

單點登錄(Single Sign On),簡稱為 SSO。多用于多系統共存的環境下,用戶在一處登錄后,就不用在其他系統中登錄,最簡單的單點登入實現可以完全基于cookie,通過往瀏覽器寫帶有登入信息的token來達到多點登入的目的,有興趣的可以自己動手實現一個

CAS單點登入的實現

先盜個圖 :

cas單點登錄.png

從結構上看,分成了三部分:CAS Client,CAS Server,瀏覽器

CAS Client 與受保護的客戶端應用部署在一起,以 Filter 方式保護 Web 應用的受保護資源,過濾從客戶端過來的每一個Web請求

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

用戶第一次登錄過程原理

  1. CAS Client 會先根據JSESSIONID(存在瀏覽器cookie中) 來判斷當前訪問用戶是否已經登錄,如果沒有JSESSIONID 會繼續分析 HTTP 請求中是否包含請求 Service Ticket( ST 上圖中的 Ticket) ,如果沒有,則說明該用戶是沒有經過認證的;于是 CAS Client 會重定向用戶請求到 CAS Server ,并傳遞 Service (要訪問的目的資源地址)
  2. 這時還沒有登錄過CAS Server,進入用戶認證過程(返回登入界面)
  3. 如果用戶認證成功,CAS Server 將隨機產生一個相當長度、唯一、不可偽造的 Service Ticket ,并緩存以待將來驗證,并且重定向用戶到 Service 所在地址(附帶剛才產生的 Service Ticket ) , 并為客戶端瀏覽器設置一個Ticket Granted Cookie( TGC,該Cookie設置的是SSO Server的域名)
  4. CAS Client 在拿到 Service 和新產生的 Ticket 過后,與 CAS Server 通過拿到的Ticket進行身份核實,以確保 Service Ticket 的合法性。

以上是第一次驗證時基本流程

當第二次驗證時分兩種情況

  1. 同一個服務再次登錄
    這里瀏覽器cookie中會有 sessionid,憑借這個sessionid就不再需要去CAS Server 繼續認證
  2. 另外一個未登錄過的服務登錄
    在上面步驟中的第二歩,因為之前已經在CAS Server 登錄成功過,CAS Server 會讀取瀏覽器中的 TGC (cookie),表明已經登入過,就不需要去返回登錄界面了,直接返回CAS Client 一個唯一 票據(ticket),并進入第三歩。這樣就實現了單點登錄,多點無需再次手動登錄

關于跨域的實現

跨域的關鍵在于瀏覽器端的Cookie:TGC,因為這個Cookie是設置在SSO Server端的,也就保證了統一票據和Client端域名無關。

總結

cas 單點登錄核心就是 單個cookieN個session

  • 單個cookie(TGC)
    在cas為各應用登錄時使用,實現了只須一次錄入用戶密碼,此cookie只于cas server相關,這也是cas可以實現跨域的關鍵
  • N個session
    各應用會創建自己的session表示是否登錄,如已登錄,就不會去CAS Server 去驗證TGC

在該協議中,所有與 CAS Server 的交互均采用 SSL 協議,以確保 STTGC 的安全性。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容