1、SSO,單點登陸(single sign on),是指在多系統應用羣中登陸一個系統,即可在其餘全部系統中獲得受權而無需再次登陸,包括單點登陸和單點註銷。java
2、單點登陸需求:多套系統可以識別同一用戶身份,並實時同步用戶信息以使各個系統進行相應的權限控制。通常單點登陸實現一個系統登陸,其餘系統便可登陸;一個系統註銷,其餘系統也會註銷;一個系統登陸信息過時,其餘系統的登陸信息也會過時。跨域
3、實際應用中,單點登陸的最佳環境是:安全
用戶在多套系統只有一個用戶名和密碼,即多套系統共享這一套用戶名和密碼,以及各應用系統採用的技術架構相同,域名後綴相同。服務器
單點登陸的最壞的環境是:架構
用戶在多套系統有各自的用戶名和密碼,每一個系統都各自存儲了各自的用戶信息,且每套系統採用的技術架構不一樣,域名後綴也不一樣。iphone
4、SSO的兩種架構與三種實現技術性能
從應用架構層面,SSO主要能夠分爲集中驗證模式和多點驗證模式。加密
集中驗證模式:當應用系統須要登陸時,統一交由驗證服務器完成功能登陸動做,應用系統不提供登陸接入(登陸界面)。spa
相對於多點驗證模式來講,集中驗證模式的適用範圍更廣,並且在SSO服務器中使用的是統一的用戶名密碼,用戶無需關注登陸的是哪套系統的帳號,因此用戶體驗更加優秀。因爲全部的登陸都放在了統一的服務器,因此當集中驗證服務器宕機時,.net
全部系統沒法正常登陸,或丟失SSO的功能,建議以獨立服務器做爲集中驗證服務器,並須要保證登陸服務器的穩定性。
多點驗證模式:應用系統供各自的登陸界面,登陸了一套系統後,另外其餘系統無需再次登陸便可經過身份驗證。
在多點驗證模式的模式下,全部的登陸操做都在應用系統完成,任何一套系統宕機不會對其它系統產生影響,也不會影響正常運行系統間的SSO。但若各套系統的帳號不同的時候,若要用戶區分每套系統的用戶密碼,一定會下降用戶的體驗,
爲了解決該問題,多點登陸模式最好有統一的用戶密碼驗證的服務(如LDAP身份驗證)。另外,多點登陸模式相對集中驗證模式來講會存在更多的技術限制。
從SSO技術實現的角度,SSO的實現一般有一下三種技術實現途徑:代理登陸(agent)、令牌環(token),身份票據(ticket)。
代理登陸(agent):代理登陸的原理就是在IE端經過表單提交的方式模擬應用系統的登陸操做,實現SSO。
代理登陸的優勢就是無需對原有系統作任何改造,適用於沒法改造的舊系統;
其缺點很明顯:
一、穩定性差,一旦登陸期間某臺服務器沒法響應,則該服務器沒法單點登陸。
二、安全性差,用戶名密碼經過明文傳輸。
三、因爲登陸期間須要監控各個系統的響應,因此不建議大量使用,不然會影響登陸的性能。
四、因爲IE的安全限制,代理登陸必須在同域的狀況下運行。
令牌環(token):經過Cookie共享令牌環的方式傳遞當前用戶信息,實現SSO。
令牌環的方式最大好處在於無需統一的驗證服務器,是「多點驗證模式」的主力實現技術,各個服務器都經過統一的密鑰對令牌進行加密解密,因此該方式具備安全性高、穩定性好、性能消耗低等優勢;其缺點就是必須保證各臺應用服務器同域。
身份票據(ticket):與令牌環不同,身份票據是經過URL的方式傳遞,經過「兩次握手」的方式,實現SSO。(如開源的CAS就是這種原理)
身份票據的方式,是適用範圍最廣的一種SSO實現方式,能夠解決跨域等問題,安全性高、穩定性好;其缺點就是必須增長一臺驗證服務器,保證在高壓下驗證服務器的穩定運行,性能方面因爲每次登陸都須要訪問驗證服務器,因此比令牌環的方式略差一點。
三種技術實現途徑的比較
比較項 |
代理登陸 |
令牌環 |
身份票據 |
需求實現程度 |
沒法實現同時切換用戶與會話同時過時 |
所有 |
所有 |
對原系統改造 |
無 |
小量改造 |
小量改造 |
安全性 |
低 |
高 |
高 |
穩定性 |
偏低 |
好 |
好 |
性能開銷 |
登陸瞬間壓力大一點 |
很是小 |
較小 |
適用範圍 |
同域,對用戶密碼不一致的系統,需在登陸服務器的用戶憑證庫保存用戶密碼映射 |
同域,對不一樣登陸名需增長對用戶憑證庫的訪問 |
全部可改造的系統,對不一樣登陸名需在登陸服務器的用戶憑證庫保存用戶映射 |
獨立驗證服務器 |
須要 |
不須要 |
須要 |
登陸模式支持 |
集中驗證模式 |
集中驗證模式/多點驗證模式 |
集中驗證模式 |
本人小白,在對接過程當中遇到單點登陸問題,查找網上資料記錄一下。
token實現思路:
一、用戶登陸校驗,校驗成功後就返回Token給客戶端。
二、客戶端收到數據後保存在客戶端。
三、客戶端每次訪問API是攜帶Token到服務器端。
四、服務器端採用filter過濾器校驗,校驗成功則返回請求數據,校驗失敗則返回錯誤碼
ticket實現思路:
一、訪問服務:sso客戶端發送請求訪問應用程序提供的服務資源。
二、定向認證:sso客戶端會重定向用戶請求到sso服務器。
三、用戶認證:進行用戶身份認證。
四、發放票據:sso服務器會產生一個隨機的ServiceTicket。
五、驗證票據:sso服務器驗證票據ServiceTicket的合法性,驗證經過後,容許客戶端訪問服務。
六、傳輸用戶信息:sso服務器驗證票據經過後,傳輸用戶認證結果信息給客戶端。
詳細CAS實現單點登錄原理請參考 http://blog.csdn.net/javaloveiphone/article/details/52439613,我以爲講的很詳細。