單點登陸SSO(Single Sign On),是目前經常使用的企業業務整合的解決方案之一。簡單的說,就是在一個存在多個系統的環境下,用戶在一處登陸以後,就不用在其餘系統中再次進行登陸,登陸一次,就能夠取得該環境下其餘全部系統的信任。html
在較大的公司內部,通常都有不少的業務支持系統爲其提供相應的管理和IT服 務,這些不一樣的系統每每是在不一樣的時期建設起來 的,運行在不一樣的平臺上;也許是由不一樣廠商開發,使用了各類不一樣的技術和標準。
隨 着企業的發展,業務系統的數量在不斷的增長,老的系統卻不能輕易的替換,這會帶來不少的開銷。其一是管理上的開銷,須要維護的系統愈來愈多。
不少系統的數 據是相互冗餘和重複的,數據的不一致性會給管理工做帶來很大的壓力。
業務和業務之間的相關性也愈來愈大,例如公司的計費系統和財務系統,財務系統和人事系 統之間都不可避免的有着密切的關係。
爲了下降管理的消耗,最大限度的重用已有投資的系統,不少企業都在進行着企業應用集成(EAI)。web
企業應用集成能夠在不一樣層面上進行:
例如:數據庫
事實上,還用一個層面上的集成變得愈來愈重要,那就是「身份認證」的整合,也就是「單點登陸」。跨域
某公園中有許多獨立的景點,遊客能夠在每一個景點門口進行買票進入。對於須要遊玩的遊客來講,這種方式很不舒服,在每一個景點都須要排隊購票,不只時間繁瑣,錢包頻繁的掏進掏出,很不安全。
因而不少遊客在公園買了一張通票(套票),這樣在進入景點時只須要出示一下這張票就能夠進入而不須要重複購買景點門票。
單點登陸的機制也是這樣的。
當用戶登陸應用系統1的時候,由於這個時候用戶尚未登陸,因此被引入到認證系統進行登陸操做(1)。
當用戶登陸成功後,認證系統返回給用戶一個認證憑證—ticket(2)。
當用戶在去訪問其餘應用系統時(3, 5),會將這個認證憑證ticket帶上,做爲本身認證的憑據,應用系統接受到請求以後會把ticket送到認證系統進行效驗,檢查ticket的合法性(4,6).
若是經過效驗,用戶就能夠在不用再次登陸的狀況下訪問應用系統2和應用系統3了。安全
從上面的視圖咱們能夠看出要實現SSO,須要有如下功能:服務器
sso須要一個獨立的認證中心,只有認證中心能接受用戶的用戶名密碼等安全信息,其餘系統不提供登陸入口,只接受認證中心的間接受權。間接受權經過令牌實現,sso認證中心驗證用戶的用戶名密碼沒問題,建立受權令牌,在接下來的跳轉過程當中,受權令牌做爲參數發送給各個子系統,子系統拿到令牌,即獲得了受權,能夠藉此建立局部會話,局部會話登陸方式與單系統的登陸方式相同。這個過程,也就是單點登陸的原理,用下圖說明:
對上圖的描述:
用戶沒有登陸時svg
用戶已登陸狀況下.net
用戶登陸成功以後,會與認證中心及各個子系統創建會話,用戶與認證中心創建的會話稱爲全局會話,用戶與各個子系統創建的會話稱爲局部會話,局部會話創建以後,用戶訪問子系統受保護資源將再也不經過認證中心,全局會話與局部會話有以下約束關係:設計
令牌設計能夠參考:基於跨域單點登陸令牌的設計與實現代理
也就是咱們上面一直說的ticket。其核心思想是在認證服務器和應用系統之間創建信任關係,主要採用訪問票據(簡稱Ticket)模型維持這種信任關係。用戶成功登陸統一認證服務器後,便得到一個ticket憑證,該憑證是用戶訪問服務器所轄全部應用系統的通行證。目前比較流行的SSO解決方案如Kerberos、Liberty Alliance、Microsoft Passport都是基於訪問票據的認證策略。
基本思想是經過統一的門戶服務器來代理用戶的Web請求,門戶服務器統一處理用戶的身份認證。基於此策略,當用戶訪問應用系統時,全部的Web請求首先被定向到門戶服務器,門戶服務器完成用戶身份認證,而後把Web請求轉向應用系統,並附加上用戶身份信息。網頁過濾器技術是Web請求重定向主要實現方式。
與基於訪問票據的認證思想相似,基於Web請求代理的認證策略也必須創建門戶服務器與應用系統之間的信任關係。但基於Web請求代理的認證策略實現機制簡潔,結構靈活,對原有Web應用的改造較少。
門戶服務器並不控制應用系統的用戶認證,只是保管應用系統的用戶帳戶信息,即代理保管用戶在應用系統中的用戶名和密碼,用戶在門戶服務器經過認證以後,進入應用系統時,門戶服務器自動完成應用系統登陸。這種策略不用改變原有應用系統,適合於基於界面的集成方式,其實現機制更加靈活簡易,成本更低。
在一個子系統中註銷,那麼全部子系統的的會話都會被銷燬。
用戶向系統1提出註銷請求,系統1根據用戶與系統1創建的會話id從會話中拿到令牌,向認證中心發起註銷請求。
認證中心校檢該令牌有效,而後銷燬全局會話,同時取出此令牌註冊的系統地址。認證中心向全部註冊系統發出註銷請求,各系統收到註銷請求後銷燬局部會話,認證中心引導用戶跳轉值登陸頁面。