1. 程式人生 > >登入問題(1)

登入問題(1)

網站使用者單點登入系統解決方案

1 背景

  在網站建設的過程中,多個應用系統一般是在不同的時期開發完成的。各應用系統由於功能側重、設計方法和開發技術有所不同,也就形成了各自獨立的使用者庫和使用者認證體系。隨著網站的發展,會出現這樣的使用者群體:以其中的一個使用者為例,他(她)使用網站的多個應用系統,但在每個應用系統中有獨立的賬號,沒有一個整體上的網站使用者賬號的概念,進入每一個應用系統前都需要以該應用系統的賬號來登入。這帶給使用者不方便的使用感受,使用者會想:既然我使用的是同一個網站上的應用,為什麼不能在一次在網站上登入之後不必再經過應用系統認證直接進入應用系統呢?使用者的要求我們稱之為 "單點登入"。

圖 1.1 網站使用者要求單點登入

2 分析

  在多個擁有各自獨立的使用者體系的應用系統間實現單點登入,我們要考慮以下的問題:

  • 單點登入系統的實現在各應用系統都採用B/S模式這一前提下進行。
  • 需要在各應用系統間統一使用者認證標誌,使用者登入後可以得到使用者令牌,各應用系統認可統一的使用者令牌。
  • 使用者令牌應當是安全加密的,並且要限定時效期。
  • 由於每個應用系統都有自己的使用者庫,一個使用者可能在不同的應用系統中使用不同的賬號,因此每個要使用多個應用系統的使用者要設定一個統一的使用者賬號並以此賬號進行單點登入,該賬號與該使用者在各應用系統中的一個賬號形成對映關係。
  • 各應用系統可能屬於不同的域,因此要實現跨域的單點登入。
  • 已經上線執行的應用系統需要進行改造來支援單點登入,正在開發的應用系統則可以在開發階段增加對單點登入的支援,但應用系統之間應該是鬆耦合。
  • 由於各應用系統往往都已經處於穩定執行期,單點登入系統的實現應該對各應用系統的登入認證體系衝擊最小,各應用系統原有的登入流程依然可用。
  • 一些應用伺服器平臺雖然提供對單點登入的支援,但要求應用系統使用者認證的設計符合其規範,這對已經處於執行期的應用系統來說難以實現。

3 設計

  以下是系統的整體設計結構:

圖 3.1 系統結構圖

3.1 單點登入管理應用

  我們首先設計單點登入管理應用:

圖 3.2 單點登入管理應用


  使用者在其中註冊一個單點登入賬號,然後針對每個應用系統繫結一個該應用系統中原有的賬號,並維護這些註冊和繫結資訊。繫結的過程需要單點登入管理應用伺服器到應用系統伺服器上驗證使用者提供的該應用系統中原有賬號和密碼,應用伺服器均以相同的Web Service介面提供該功能支援。

3.2 使用者單點登入流程

   之後以使用者單點登入管理應用和令牌傳輸識別的標準來實現使用者單點登入流程。

1、使用者訪問應用系統。

圖 3.3 使用者單點登入流程 - 步驟一


2、應用系統如果檢查到使用者沒有在自己的伺服器登入,則將使用者請求重定向到單點登入伺服器上。(使用重定向就可以處理各伺服器跨域的情況)

圖 3.4 使用者單點登入流程 - 步驟二


3、單點登入伺服器檢查到使用者已經單點登入(如果使用者沒有單點登入則要求使用者登入,登入標誌儲存為客戶端瀏覽器的Cookie),找到該使用者在相應應用系統上繫結的賬號。

圖 3.5 使用者單點登入流程 - 步驟三

4、單點登入伺服器根據第三步的結果生成使用者令牌,重定向迴應用系統。

圖 3.6 使用者單點登入流程 - 步驟四

5、應用系統接收統一格式的使用者令牌,取得使用者在本系統上的登入賬號,將使用者在本系統上狀態置為登入,返回使用者請求訪問的頁面。

圖 3.7 使用者單點登入流程 - 步驟五

 

  如果使用者在訪問應用系統之前已經在單點登入伺服器上登入過,第二步到第四布對使用者來說就是透明的,使用者感覺只是嚮應用系統發出了訪問請求,然後得到了頁面反饋。

4 實現

(略)

5 總結

  本方案設計的使用者單點登入系統做到了:

  • 真正了實現單點登入、全網訪問,方便使用者的使用過程。
  • 各系統之間耦合度低,應用系統的改造不破壞其固有流程和結構,整個系統的實施過程安全平滑。
  • 統一了單點登入伺服器到應用伺服器的使用者認證資訊訪問標準,統一了令牌安全加密的傳輸和識別標準,為將來更多應用系統提供了統一的單點登入框架。
  • 整合了過去分散在各應用系統中雖然有內在關聯卻難以判別的使用者資訊資源,為更進一步的使用者個性化服務打下了基礎。 
  • http://www.ronghai.com/solution/2004-09/627/627_1.html