單點登陸原理和實現

什麼是單點登陸

單點登陸SSO(Single Sign On),是目前經常使用的企業業務整合的解決方案之一。簡單的說,就是在一個存在多個系統的環境下,用戶在一處登陸以後,就不用在其餘系統中再次進行登陸,登陸一次,就能夠取得該環境下其餘全部系統的信任。html

爲何要用單點登陸

在較大的公司內部,通常都有不少的業務支持系統爲其提供相應的管理和IT服 務,這些不一樣的系統每每是在不一樣的時期建設起來 的,運行在不一樣的平臺上;也許是由不一樣廠商開發,使用了各類不一樣的技術和標準。
隨 着企業的發展,業務系統的數量在不斷的增長,老的系統卻不能輕易的替換,這會帶來不少的開銷。其一是管理上的開銷,須要維護的系統愈來愈多。
不少系統的數 據是相互冗餘和重複的,數據的不一致性會給管理工做帶來很大的壓力。
業務和業務之間的相關性也愈來愈大,例如公司的計費系統和財務系統,財務系統和人事系 統之間都不可避免的有着密切的關係。
爲了下降管理的消耗,最大限度的重用已有投資的系統,不少企業都在進行着企業應用集成(EAI)。web

企業應用集成能夠在不一樣層面上進行:
例如:數據庫

  • 在數據存儲層面上的「數據大集中」,
  • 在傳輸層面上的「通用數據交換平臺」,
  • 在應用層面上的「業務流程整合」,
  • 和用 戶界面上的「通用企業門戶」等等。

事實上,還用一個層面上的集成變得愈來愈重要,那就是「身份認證」的整合,也就是「單點登陸」。跨域

單點登陸的運行機制

一個簡單的運行機制

某公園中有許多獨立的景點,遊客能夠在每一個景點門口進行買票進入。對於須要遊玩的遊客來講,這種方式很不舒服,在每一個景點都須要排隊購票,不只時間繁瑣,錢包頻繁的掏進掏出,很不安全。
因而不少遊客在公園買了一張通票(套票),這樣在進入景點時只須要出示一下這張票就能夠進入而不須要重複購買景點門票。
單點登陸的機制也是這樣的。
在這裏插入圖片描述
當用戶登陸應用系統1的時候,由於這個時候用戶尚未登陸,因此被引入到認證系統進行登陸操做(1)。
當用戶登陸成功後,認證系統返回給用戶一個認證憑證—ticket(2)。
當用戶在去訪問其餘應用系統時(3, 5),會將這個認證憑證ticket帶上,做爲本身認證的憑據,應用系統接受到請求以後會把ticket送到認證系統進行效驗,檢查ticket的合法性(4,6).
若是經過效驗,用戶就能夠在不用再次登陸的狀況下訪問應用系統2和應用系統3了。安全

稍微複雜的運行機制

從上面的視圖咱們能夠看出要實現SSO,須要有如下功能:服務器

  • 統一的認證系統。全部應用系統共享一個認證系統,認證系統的主要功能是將用戶的登陸信息和用戶信息庫進行比對,對用戶進行登陸認證,並將登陸成功產生的憑證ticket返回給用戶。
  • 認證系統可以對用戶帶的ticket校檢,判斷其有效性。而且全部的應用系統須要可以識別和提取ticket信息。
  • 應用系統可以對ticket進行識別和校檢,經過和認證系統的通信,自動判斷當前用戶是否登陸,從而完成單點登陸功能。
    這裏須要注意的是:
    單一的用戶信息數據庫並非必須的,實際上,只要統一認證系統,統一ticket的產生和校檢,不管用戶信息存放在哪裏都能實現單點登陸。
    統一的認證系統並不意味着只有單個認證服務器,認證服務器之間要經過標準的通信協議,互相交換認證信息,就能完成更高級別的單點登陸。
    在這裏插入圖片描述

單點登陸實現原理

sso須要一個獨立的認證中心,只有認證中心能接受用戶的用戶名密碼等安全信息,其餘系統不提供登陸入口,只接受認證中心的間接受權。間接受權經過令牌實現,sso認證中心驗證用戶的用戶名密碼沒問題,建立受權令牌,在接下來的跳轉過程當中,受權令牌做爲參數發送給各個子系統,子系統拿到令牌,即獲得了受權,能夠藉此建立局部會話,局部會話登陸方式與單系統的登陸方式相同。這個過程,也就是單點登陸的原理,用下圖說明:
在這裏插入圖片描述
對上圖的描述:
用戶沒有登陸時svg

  1. 用戶訪問系統1的保護資源時,系統1檢測到用戶尚未進行登陸,將會將請求跳轉至認證中心繫統,認證中心檢測用戶確實沒有登陸,那麼跳轉至登陸頁面。
  2. 用戶在登陸頁面提交本身的認證信息給認證中心,認證中心校檢用戶的信息,若是用戶信息正確,將會建立與該用戶的全局會話(若是全局會話過時,那麼用戶將要從新登陸,在全局會話中可能將生成的令牌,用戶我的信息,登陸狀況等信息存儲在全局會話中)。
  3. 認證中心將帶着建立的令牌跳轉回最初的請求地址(系統1),系統1得到令牌後會去認證中心校檢該令牌是否有效,若是有效,則進行下一步。
  4. 系統1使用該令牌建立與用戶的會話,稱爲局部會話,返回受保護資源(若是局部會話過時,系統1會請求認證中心,認證中心發現該用戶已經登陸,執行步驟3)

用戶已登陸狀況下.net

  1. 用戶訪問系統2,系統二發現該用戶沒有登陸,跳轉至認證中心,並將本身的地址做爲參數。
  2. 認證中心發現該用戶已經登陸,跳轉回系統2的地址,並附帶上令牌,系統2拿到令牌後去認證中心校檢該令牌是否有效。認證中心返回該令牌有效,註冊系統2,系統2使用該令牌建立局部會話,返回受保護資源。

用戶登陸成功以後,會與認證中心及各個子系統創建會話,用戶與認證中心創建的會話稱爲全局會話,用戶與各個子系統創建的會話稱爲局部會話,局部會話創建以後,用戶訪問子系統受保護資源將再也不經過認證中心,全局會話與局部會話有以下約束關係:設計

  • 局部會話存在,全局會話必定存在
  • 全局會話存在,局部會話不必定存在
  • 全局會話銷燬,局部會話必須銷燬

令牌設計能夠參考:基於跨域單點登陸令牌的設計與實現代理

單點登陸中用戶認證策略

1. 基於訪問票據的認證策略

也就是咱們上面一直說的ticket。其核心思想是在認證服務器和應用系統之間創建信任關係,主要採用訪問票據(簡稱Ticket)模型維持這種信任關係。用戶成功登陸統一認證服務器後,便得到一個ticket憑證,該憑證是用戶訪問服務器所轄全部應用系統的通行證。目前比較流行的SSO解決方案如Kerberos、Liberty Alliance、Microsoft Passport都是基於訪問票據的認證策略。

2. 基於Web請求代理的認證策略

基本思想是經過統一的門戶服務器來代理用戶的Web請求,門戶服務器統一處理用戶的身份認證。基於此策略,當用戶訪問應用系統時,全部的Web請求首先被定向到門戶服務器,門戶服務器完成用戶身份認證,而後把Web請求轉向應用系統,並附加上用戶身份信息。網頁過濾器技術是Web請求重定向主要實現方式。
與基於訪問票據的認證思想相似,基於Web請求代理的認證策略也必須創建門戶服務器與應用系統之間的信任關係。但基於Web請求代理的認證策略實現機制簡潔,結構靈活,對原有Web應用的改造較少。

3. 基於密碼代理的認證策略

門戶服務器並不控制應用系統的用戶認證,只是保管應用系統的用戶帳戶信息,即代理保管用戶在應用系統中的用戶名和密碼,用戶在門戶服務器經過認證以後,進入應用系統時,門戶服務器自動完成應用系統登陸。這種策略不用改變原有應用系統,適合於基於界面的集成方式,其實現機制更加靈活簡易,成本更低。

單點註銷

在一個子系統中註銷,那麼全部子系統的的會話都會被銷燬。
在這裏插入圖片描述
用戶向系統1提出註銷請求,系統1根據用戶與系統1創建的會話id從會話中拿到令牌,向認證中心發起註銷請求。
認證中心校檢該令牌有效,而後銷燬全局會話,同時取出此令牌註冊的系統地址。認證中心向全部註冊系統發出註銷請求,各系統收到註銷請求後銷燬局部會話,認證中心引導用戶跳轉值登陸頁面。

本文參考

單點登陸原理與簡單實現
單點登陸技術淺析
單點登陸的原理

相關文章
相關標籤/搜索