使用CAS機制完成SSO

完成單點登錄其實就是完成會話共享問題,之前談了談關於在二級域名共享cookie實現單點登錄的方式二級域名下共享cookie實現SSO。缺陷就是一旦二級域名無法共享cookie時,單點登錄就會失效,所以就有了CAS機制(Central Authentiction Service)。

還是那句話,不要對一些名詞產生畏懼,CAS本質解決的還是session共享的問題,只是共享方式區別於域名間cookie共享。假設我們有app1.star.com,app2.moon.com,cas.sun.com,分別代表應用1,應用2和CAS認證中心。

首次請求app1時,會檢查本地會話id,這時肯定是木有的,所以會重定向到cas認證中心進行登錄認證, 登錄完成cas中心會頒發一個ticket票據(名字無所謂,主要是ticket要關聯cas中心sessionId),ticket都是一次性使用,可以直接丟redis,設置較短的有效期,防止ticket泄漏重複使用。

此時cas系統已是登錄狀態的,cas有自己的sessionId,並且生成的ticket可以關聯到sessionId。so,cas就可以重定向會app1請求路徑,並附帶請求參數ticket。app1檢查本地會話id,還是未登錄,但是有了一個ticket,於是拿ticket去redis獲取sessionId(不一定是redis,和cas放ticket一致即可)。

app1有了sessionId,就可以拿到有關sessionId的attrs信息,然後自己在本地生成一個cookie,重定向到請求路徑即可,這時檢查本地會話id已經登錄,app1就完成了登錄相關操作。

在這裏插入圖片描述
這時請求app2,同樣檢查本地會話id,未登錄跳轉cas中心,但此時cas已經登錄了,so,cas直接頒發一個ticket跳轉回app2原請求url。app2檢查本地會話id,還是未登錄,但是有了一個ticket,於是拿ticket去redis獲取sessionId及相關會話id數據,然後生成自己的cookie,跳轉到請求路徑,至此app2也完成了免登操作。
在這裏插入圖片描述
原理搞清楚了,宏觀而言,實現起來自然非常簡單,搞一套cas認證中心,然後外放一套cas認證依賴,搞定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章