原貼地址:http://www.coolcode.cn/?p=89
目的:
對目前已有的 Web 應用系統,和將來待開發的 Web 應用系統進行集成,實現單點登錄。
要求:
- 對已有的 Web 應用系統不作大規模改造。
- 不限制待開發的 Web 應用系統的開發工具。
- 不增加待開發系統的開發難度。
分析:
- 目前,已有的系統都各自維護自己的一套用戶庫,每個系統中的用戶數、用戶名、密碼幾乎都各不相同。要將已有的用戶庫進行統一是不現實的。因此,我們可以通過將單點登錄系統中的用戶與其它個系統中的用戶建立映射,來實現用一個帳號來管理多個系統的目的。
- 已有的 Web 應用系統、以及待開發的 Web 應用系統,可能不在同一個域下,雖然會話本身是保存在服務器端,但是會話 id 是需要 cookie 來傳遞的,而 cookie 不允許跨域訪問,而且考慮到各個系統的開發工具也各不相同,即使在同一個域下,不同的開發工具所開發的應用程序之間也很難共享會話,因此要用共享會話的方式來實現單點登錄也不現實。因此我們通過在客戶端瀏覽器、單點登錄系統和 Web 應用系統之間傳遞臨時會話,并讓 Web 應用系統直接到單點登錄系統中獲取認證信息來實現單點登錄。為保證不同開發工具都能夠到單點登錄系統獲取認證信息,我們采用 xml-rpc 在 Web 應用系統和單點登錄系統之間進行通訊。
實現:
單點登錄系統中設置 4 個表:
- 單點登錄系統用戶表,包含 user_id,name,password 3 個字段。
- Web 應用系統表,包含 app_id,name(Web 應用系統名稱),checkurl(Web 應用系統中用來驗證用戶登錄的程序地址) 3 個字段。
- 單點登錄系統用戶到各個 Web 應用系統的用戶映射表,包含id,user_id,app_id,name,password 5 個字段。
- 臨時會話表,包含 hash(臨時會話的 hash 編號),id(對應單點登錄系統用戶到各個 Web 應用系統的用戶映射表中的 id 字段) 2個字段。
用戶登錄單點登錄系統時,通過單點登錄系統用戶表中的字段來驗證用戶身份。登錄以后,用戶可以設置各個系統到該系統用戶的映射關系。設置好以后,當通過該系統進入其他某個 Web 應用系統時,該系統會為該用戶和該系統生成一個臨時會話編號(hash),并轉到 Web 應用系統中的登錄檢測頁面,登錄檢測頁面通過獲取到的臨時會話編號,來調用單點登錄系統的獲取用戶名和密碼的 xml-rpc API,如果用戶名密碼如果正確,則轉到正常登錄后的頁面,如果不正確,則轉到登錄錯誤的頁面。這里,xml-rpc API 在返回用戶名和密碼后,將刪除單點登錄系統數據庫中相應的臨時會話,這樣不但用戶名、密碼都是在服務器之間進行傳遞的,并且臨時會話存在的時間也是盡可能的短,因此只要保證服務器之間的對話不能被監聽,即可保證安全性。
已有系統需要增加一個用于單點登錄系統的登錄驗證頁面,該頁面工作過程大致如下:
- 獲取 客戶端 hash 值
- 通過 hash 值得到用戶名和密碼(xml-rpc 調用)
- 通過用戶名和密碼進行身份驗證
- 返回身份驗證后的頁面
posted on 2006-09-12 14:43
OMG 閱讀(428)
評論(0) 編輯 收藏 所屬分類:
<項目>系統集成