單點登入的原理、實現、及技術方案比較詳解
來源:mikechen的網際網路架構
大家好,我是mikechen。
本篇和大家分享、探討SSO(單點登入),內容涉及SSO的定義、表現、原理、實現細節等方面的闡述@mikechen
一、單點登入介紹
單點登入(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。
單點登入SSO(Single Sign On)說得簡單點就是在一個多系統共存的環境下,使用者在一處登入後,就不用在其他系統中登入,也就是使用者的一次登入能得到其他所有系統的信任。
二、為什麼需要單點登入
單點登入在大型網站裡使用得非常頻繁,例如,阿里旗下有淘寶、天貓、支付寶等網站,還有背後的成百上千的子系統,使用者一次操作或交易可能涉及到幾十個子系統的協作,如果每個子系統都需要使用者認證,不僅使用者會瘋掉,各子系統也會為這種重複認證授權的邏輯搞瘋掉。
所以,單點登入要解決的就是,使用者只需要登入一次就可以訪問所有相互信任的應用系統。
三、單點登入的來源
1.早期的單機部署:web單系統應用
早期我們開發web應用都是所有的包放在一起打成一個war包放入tomcat容器來執行的,所有的功能,所有的業務,後臺管理,門戶介面,都是由這一個war來支援的,這樣的單應用,也稱之為巨石應用,因為十分不好擴充套件和拆分。
在巨石應用下,使用者的登入以及許可權就顯得十分簡單,使用者登入成功後,把相關資訊放入會話中,HTTP維護這個會話,再每次使用者請求伺服器的時候來驗證這個會話即可,大致可以用下圖來表示:
驗證登入的這個會話就是session,維護了使用者狀態,也就是所謂的HTTP有狀態協議,我們經常可以在瀏覽器中看到JSESSIONID,這個就是用來維持這個關係的key。
2.分散式叢集部署
由於網站的訪問量越來也大,單機部署已經是巨大瓶頸,所以才有了後來的分散式叢集部署。例如:如果引入叢集的概念,1單應用可能重新部署在3臺tomcat以上伺服器,使用nginx來實現反向代理, 此時,這個session就無法在這3臺tomcat上共享,使用者資訊會丟失,所以不得不考慮多伺服器之間的session同步問題,這就是單點登入的來源。
四、單點登入的原理和實現
單點登入的實現方案,一般就包含以下三種:
Cookies
Session同步
分散式Session方式
目前的大型網站都是採用分散式Session的方式。我先從cookie的實現談起,你就能很清楚的知道為什麼需要分散式session方式實現單點登入。
基於Cookie的單點登入
最簡單的單點登入實現方式,是使用cookie作為媒介,存放使用者憑證。使用者登入父應用之後,應用返回一個加密的cookie,當使用者訪問子應用的時候,攜帶上這個cookie,授權應用解密cookie並進行校驗,校驗透過則登入當前使用者。
不難發現以上方式把信任儲存在客戶端的Cookie中,這種方式很容易令人質疑:
Cookie不安全
不能跨域實現免登
對於第一個問題,透過加密Cookie可以保證安全性,當然這是在原始碼不洩露的前提下。如果Cookie的加密演算法洩露,攻擊者透過偽造Cookie則可以偽造特定使用者身份,這是很危險的。
對於第二個問題,不能跨域實現免登更是硬傷。所以,才有了以下的分散式session方案。
五、分散式session方式實現單點登入
例如,阿里有很多系統分割為多個子系統,獨立部署後,不可避免的會遇到會話管理的問題,類似這樣的電商網站一般採用分散式Session實現。
再進一步可以根據分散式Session,建立完善的單點登入或賬戶管理系統。
流程執行:
使用者第一次登入時,將會話資訊(使用者Id和使用者資訊),比如以使用者Id為Key,寫入分散式Session;
使用者再次登入時,獲取分散式Session,是否有會話資訊,如果沒有則調到登入頁;
一般採用Cache中介軟體實現,建議使用Redis,因此它有持久化功能,方便分散式Session當機後,可以從持久化儲存中載入會話資訊;
存入會話時,可以設定會話保持的時間,比如15分鐘,超過後自動超時;
結合Cache中介軟體,實現的分散式Session,可以很好的模擬Session會話。
六、總結
以上分別從單點登入的原理、來源、實現機制來完整的解讀單點登入。實現單點登入說到底就是要解決如何產生和儲存那個信任,再就是其他系統如何驗證這個信任的有效性,因此要點也就以下兩個:
儲存信任
驗證信任
儲存信任建議可以採用分散式檔案儲存redis來實現。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024922/viewspace-2994620/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 單點登入原理與技術實現比較
- 單點登入 SSO 的實現原理
- 單點登入原理與簡單實現
- SSO單點登入三種情況的實現方式詳解
- 單點登入原理
- CAS實現單點登入SSO執行原理探究
- java實現簡單的單點登入Java
- 掃碼登入認證技術原理介紹及實踐
- 跨域分散式系統單點登入的實現(CAS單點登入)跨域分散式
- 技術分享| 分散式系統中服務註冊發現元件的原理及比較分散式元件
- 使用CAS實現單點登入
- 如果快速理解及實現單點登入及分散式回話分散式
- 單點登入的三種實現方式
- linux防火牆實現技術比較(轉)Linux防火牆
- 技術分享| 基於 Etcd 的分散式鎖實現原理及方案分散式
- Spring Security——基於表單登入認證原理及實現Spring
- 單點登入的實現問題:幾種方式的實現原理有點了解,但還沒怎麼考慮到實現時的技術難點,請各位有這方面經驗的大哥能給我列出些實現上的技術及難點,先謝謝了!
- Casdoor + OAuth 實現單點登入 SSOOAuth
- 實戰模擬│單點登入 SSO 的實現
- IM的掃碼登入功能如何實現?一文搞懂主流的掃碼登入技術原理
- 微信掃碼登入的技術實現思考
- vue實現單點登入的N種方式Vue
- linux防火牆實現技術比較(1)(轉)Linux防火牆
- 單點登入之cas整合sonar的配置方法詳解
- CAS實現單點登入SSO執行原理探究(終於明白了)
- 單點登陸原理及程式碼(CAS)
- OAuth2實現單點登入SSOOAuth
- 22 CAS實現單點登入體驗
- 什麼是單點登入?如何實現?
- 大檔案上傳原理及實現方案 | 京東物流技術團隊
- SSM專案搭建及實現簡單的登入SSM
- 談談SSO單點登入的設計實現
- 實現saas多租戶方案比較
- 單點登入系統原理與實現,圖文並茂,附原始碼原始碼
- 一圖搞懂掃碼登入的技術原理
- 不同解決方案的比較
- 基於IdentityServer4的OIDC實現單點登入(SSO)原理簡析IDEServer
- HTML程式碼混淆技術:原理、應用和實現方法詳解HTML