SSO 單點登錄 - CAS(集中認證服務)


真正的單點登錄,可以通過 CAS 來設計,集中認證服務,也就是認證是由一個獨立的域名提供的網頁認證服務(也是一個系統,認證中心)。

多個域名共享Cookie,在寫到客戶端的時候設置Cookie的domain。也就是說需要一個地方設置哪些域名是可以共享Cookie,也就是單點登錄的所有系統的域名。

這個過程和微信公眾號的網頁認證一樣,流程描述如下:

現在有兩個應用系統(www.java3y.comwww.java4y.com)和一個認證系統(www.sso.com)

 

 

首先,用戶想要訪問系統Awww.java3y.com受限的資源(比如說購物車功能,購物車功能需要登錄后才能訪問),系統Awww.java3y.com發現用戶並沒有登錄,於是重定向到sso認證中心,並將自己的地址作為參數。請求的地址如下:

  • www.sso.com?service=www.java3y.com

sso認證中心發現用戶未登錄,將用戶引導至登錄頁面,用戶進行輸入用戶名和密碼進行登錄,用戶與認證中心建立全局會話(生成一份Token,寫到Cookie中,保存在瀏覽器上)

 

 

隨后,認證中心重定向回系統A,並把Token攜帶過去給系統A,重定向的地址如下:

  • www.java3y.com?token=xxxxxxx

接着,系統A去sso認證中心驗證這個Token是否正確,如果正確,則系統A和用戶建立局部會話(創建Session)。到此,系統A和用戶已經是登錄狀態了。

 

 

此時,用戶想要訪問系統Bwww.java4y.com受限的資源(比如說訂單功能,訂單功能需要登錄后才能訪問),系統Bwww.java4y.com發現用戶並沒有登錄,於是重定向到sso認證中心,並將自己的地址作為參數。請求的地址如下:

  • www.sso.com?service=www.java4y.com

注意,因為之前用戶與認證中心www.sso.com已經建立了全局會話(當時已經把Cookie保存到瀏覽器上了),所以這次系統B重定向到認證中心www.sso.com是可以帶上Cookie的。

認證中心根據帶過來的Cookie發現已經與用戶建立了全局會話了,認證中心重定向回系統B,並把Token攜帶過去給系統B,重定向的地址如下:

  • www.java4y.com?token=xxxxxxx

接着,系統B去sso認證中心驗證這個Token是否正確,如果正確,則系統B和用戶建立局部會話(創建Session)。到此,系統B和用戶已經是登錄狀態了。

 

 

CAS官網上的標准流程如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM