單點登錄系統的設計與實現方案

posts - 162,  comments - 553,  trackbacks - 0

目的:

對目前已有的 Web 應用系統,和將來待開發的 Web 應用系統進行集成,實現單點登錄。

要求:

  1. 對已有的 Web 應用系統不作大規模改造。
  2. 不限制待開發的 Web 應用系統的開發工具。
  3. 不增加待開發系統的開發難度。

分析:

  1. 目前,已有的系統都各自維護自己的一套用戶庫,每個系統中的用戶數、用戶名、密碼幾乎都各不相同。要將已有的用戶庫進行統一是不現實的。因此,我們可以通過將單點登錄系統中的用戶與其它個系統中的用戶建立映射,來實現用一個帳號來管理多個系統的目的。
  2. 已 有的 Web 應用系統、以及待開發的 Web 應用系統,可能不在同一個域下,雖然會話本身是保存在服務器端,但是會話 id 是需要 cookie 來傳遞的,而 cookie 不允許跨域訪問,而且考慮到各個系統的開發工具也各不相同,即使在同一個域下,不同的開發工具所開發的應用程序之間也很難共享會話,因此要用共享會話的方 式來實現單點登錄也不現實。因此我們通過在客戶端瀏覽器、單點登錄系統和 Web 應用系統之間傳遞臨時會話,並讓 Web 應用系統直接到單點登錄系統中獲取認證信息來實現單點登錄。爲保證不同開發工具都能夠到單點登錄系統獲取認證信息,我們採用 xml-rpc 在 Web 應用系統和單點登錄系統之間進行通訊。

實現:

單點登錄系統中設置 4 個表:

  1. 單點登錄系統用戶表,包含 user_id,name,password 3 個字段。
  2. Web 應用系統表,包含 app_id,name(Web 應用系統名稱),checkurl(Web 應用系統中用來驗證用戶登錄的程序地址) 3 個字段。
  3. 單點登錄系統用戶到各個 Web 應用系統的用戶映射表,包含id,user_id,app_id,name,password 5 個字段。
  4. 臨時會話表,包含 hash(臨時會話的 hash 編號),id(對應單點登錄系統用戶到各個 Web 應用系統的用戶映射表中的 id 字段) 2個字段。

用戶登錄單點登錄系統時,通過單點登錄系統用戶表中的字段來驗證用戶身份。登錄以後,用戶可以設置各個系統到該系統用戶的映射關係。設置好以後,當通過該 系統進入其他某個 Web 應用系統時,該系統會爲該用戶和該系統生成一個臨時會話編號(hash),並轉到 Web 應用系統中的登錄檢測頁面,登錄檢測頁面通過獲取到的臨時會話編號,來調用單點登錄系統的獲取用戶名和密碼的 xml-rpc API,如果用戶名密碼如果正確,則轉到正常登錄後的頁面,如果不正確,則轉到登錄錯誤的頁面。這裏,xml-rpc API 在返回用戶名和密碼後,將刪除單點登錄系統數據庫中相應的臨時會話,這樣不但用戶名、密碼都是在服務器之間進行傳遞的,並且臨時會話存在的時間也是儘可能 的短,因此只要保證服務器之間的對話不能被監聽,即可保證安全性。 已有系統需要增加一個用於單點登錄系統的登錄驗證頁面,該頁面工作過程大致如下:

  1. 獲取 客戶端 hash 值
  2. 通過 hash 值得到用戶名和密碼(xml-rpc 調用)
  3. 通過用戶名和密碼進行身份驗證
  4. 返回身份驗證後的頁面

原作者:andot,來源coolcode.cn,原文:http://www.coolcode.cn/show-89-1.html

發佈了44 篇原創文章 · 獲贊 63 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章