【Spring Boot&& Spring Cloud系列】單點登錄SSO概述


概念

單點登錄(Singleton Sign On),簡稱為SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就能訪問所有相互信任的應用系統。

也就是說在一個多系統共存的環境下,用戶在一處登錄后,就不用在其他系統中登錄,也就是用戶的一次登錄就能得到其他所有系統的信任。單點登錄在大型網站中使用非常頻繁,例如阿里這里的網站,在網站的背后是成百上千的子系統,用戶一次操作或交易可能涉及到幾十個子系統的協作,如果每個子系統都需要用戶認證,不僅用戶操作繁瑣,各子系統重復認證授權也十分繁瑣,因此實現單點登錄說到底就是解決產生和存儲信任,再就是其他系統驗證信任的有效性。

實現方案

方案一、Cookie

原理:實現一次登錄和一次退出,session是保持登錄狀態關鍵的東西,客戶端持有ID,服務端持有session,兩者一起用來保持登錄狀態。客戶端需要用ID來作為憑證,二服務端需要用session來驗證ID的有效性。但是不同的服務有自己的Session,因此要想辦法讓各個server共用session信息

缺陷:1、Cookie不安全(可以采取Cookie加密提高安全性)

 2、不能跨域免登

方案二、Token

原理:將信任關系存儲在單獨的SS哦系統里,也就是從客戶端移到了服務端。

解決問題:1、如何高效的存儲大量臨時性的信任數據

2、如何防止信息傳遞過程被篡改

3、如何讓SSO系統信任登陸系統和免登系統

解決方案:1、采用類似memcached的分布式緩存的方案,既能提供可擴展數據量的機制,也能提供高效訪問。

 2、采用數字簽名(數字證書簽名或md5等加密方式),這就需要SS哦系統返回免登URL的時候對需要驗證的參數進行加密,並帶上token一起返回。最后需免登陸的系統進行驗證信任關系的時候,需把這個token傳給SSO系統,SSO系統通過對token的驗證就可以辨別信息是否被改過

 3、設置白名單,也就是只有白名單上的系統才能請求信任關系,同理只有在白名單上的系統才能被免登陸。

基本概念:

1、什么是跨域Web SSO:

域名通過“.”號切分后,從右往左看,不包含"."的是頂級域名,包含一個"."的是一級域名,包含兩個"."的是二級域名,依次類推。

https://www.baidu.com:com是頂級域名,baidu.com是一級域名,www.baidu.com是二級域名。

2、瀏覽器讀寫cookie的安全性限制:一級或頂級域名不同的網站,無法讀取到彼此寫的cookie

一級域名相同,只是二級或更高級域名不同的站點,可以通過設置domain參數共享cookie的讀寫。這種場景可以選擇不跨域的SSO方案

域名相同,只是https和http協議不同的URL默認cookie可以共享。

3、http協議是無狀態協議,瀏覽器訪問服務器時,要讓服務器知道你是誰,只有兩種方式:

1)將信息寫入cookie,它會隨着每次HTTP請求帶到服務端

2)在URL、表單數據中帶上用戶信息(也可能在HTTP頭部)。這種方式依賴於從特定的網頁入口進入,因為只有走特定的入口,才有機會拼裝出相應的信息,提交到服務端。

單點登錄的核心步驟:

1、用戶未登錄時訪問子站一、子站一服務器檢測到用戶沒有登錄(沒有本站點session,因為沒傳過來session對應的cookie),於是通知瀏覽器跳轉到SSO服務站點,並在跳轉的URL參數中帶上當前的頁面地址,以便登錄后自動跳轉回本頁。

2、SSO服務站點檢測到用戶沒有登錄,於是顯示登錄頁面

    用戶提交登錄請求道服務端,服務端驗證通過,創建和賬號對應的用戶登陸憑證(token)

   然后,服務端通知瀏覽器把該token作為SSO服務站點的cookie存儲起來,並跳轉回子站一,跳回子站的URL參數中帶上這個token

3、瀏覽器在寫SSO服務站點cookie后,跳轉回子站一。

   子站一服務端檢測到瀏覽器請求的URL中帶了單點登錄的token,於是把這個token發到SSO服務站點驗證。

   SSO服務端站點拿token解密出用戶賬號,把賬號信息中允許子站一訪問的部分返回給子站一。

      子站一根據返回的信息生成用戶在本站的會話,把會話對應cookie寫入瀏覽器,從而完成在本站的登入以及會話保持。之后用戶訪問再子站一時,都會帶上這個cookie,從而保持在本站的登錄狀態。

 


免責聲明!

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



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