1 背景
在網(wǎng)站建設(shè)的過程中,多個應(yīng)用系統(tǒng)一般是在不同的時期開發(fā)完成的。各應(yīng)用系統(tǒng)由于功能側(cè)重、設(shè)計方法和開發(fā)技術(shù)有所不同,也就形成了各自獨立的用戶庫和用戶認(rèn)證體系。隨著網(wǎng)站的發(fā)展,會出現(xiàn)這樣的用戶群體:以其中的一個用戶為例,他(她)使用網(wǎng)站的多個應(yīng)用系統(tǒng),但在每個應(yīng)用系統(tǒng)中有獨立的賬號,沒有一個整體上的網(wǎng)站用戶賬號的概念,進(jìn)入每一個應(yīng)用系統(tǒng)前都需要以該應(yīng)用系統(tǒng)的賬號來登錄。這帶給用戶不方便的使用感受,用戶會想:既然我使用的是同一個網(wǎng)站上的應(yīng)用,為什么不能在一次在網(wǎng)站上登錄之后不必再經(jīng)過應(yīng)用系統(tǒng)認(rèn)證直接進(jìn)入應(yīng)用系統(tǒng)呢?用戶的要求我們稱之為 "單點登錄"。
2 分析
在多個擁有各自獨立的用戶體系的應(yīng)用系統(tǒng)間實現(xiàn)單點登錄,我們要考慮以下的問題:
- 單點登錄系統(tǒng)的實現(xiàn)在各應(yīng)用系統(tǒng)都采用B/S模式這一前提下進(jìn)行。
- 需要在各應(yīng)用系統(tǒng)間統(tǒng)一用戶認(rèn)證標(biāo)志,用戶登錄后可以得到用戶令牌,各應(yīng)用系統(tǒng)認(rèn)可統(tǒng)一的用戶令牌。
- 用戶令牌應(yīng)當(dāng)是安全加密的,并且要限定時效期。
- 由于每個應(yīng)用系統(tǒng)都有自己的用戶庫,一個用戶可能在不同的應(yīng)用系統(tǒng)中使用不同的賬號,因此每個要使用多個應(yīng)用系統(tǒng)的用戶要設(shè)置一個統(tǒng)一的用戶賬號并以此賬號進(jìn)行單點登錄,該賬號與該用戶在各應(yīng)用系統(tǒng)中的一個賬號形成映射關(guān)系。
- 各應(yīng)用系統(tǒng)可能屬于不同的域,因此要實現(xiàn)跨域的單點登錄。
- 已經(jīng)上線運行的應(yīng)用系統(tǒng)需要進(jìn)行改造來支持單點登錄,正在開發(fā)的應(yīng)用系統(tǒng)則可以在開發(fā)階段增加對單點登錄的支持,但應(yīng)用系統(tǒng)之間應(yīng)該是松耦合。
- 由于各應(yīng)用系統(tǒng)往往都已經(jīng)處于穩(wěn)定運行期,單點登錄系統(tǒng)的實現(xiàn)應(yīng)該對各應(yīng)用系統(tǒng)的登錄認(rèn)證體系沖擊最小,各應(yīng)用系統(tǒng)原有的登錄流程依然可用。
- 一些應(yīng)用服務(wù)器平臺雖然提供對單點登錄的支持,但要求應(yīng)用系統(tǒng)用戶認(rèn)證的設(shè)計符合其規(guī)范,這對已經(jīng)處于運行期的應(yīng)用系統(tǒng)來說難以實現(xiàn)。
3 設(shè)計
以下是系統(tǒng)的整體設(shè)計結(jié)構(gòu):
|
圖 3.1 系統(tǒng)結(jié)構(gòu)圖 |
3.1 單點登錄管理應(yīng)用
我們首先設(shè)計單點登錄管理應(yīng)用:
用戶在其中注冊一個單點登錄賬號,然后針對每個應(yīng)用系統(tǒng)綁定一個該應(yīng)用系統(tǒng)中原有的賬號,并維護(hù)這些注冊和綁定信息。綁定的過程需要單點登錄管理應(yīng)用服務(wù)器到應(yīng)用系統(tǒng)服務(wù)器上驗證用戶提供的該應(yīng)用系統(tǒng)中原有賬號和密碼,應(yīng)用服務(wù)器均以相同的Web Service接口提供該功能支持。
3.2 用戶單點登錄流程
之后以用戶單點登錄管理應(yīng)用和令牌傳輸識別的標(biāo)準(zhǔn)來實現(xiàn)用戶單點登錄流程。
1、用戶訪問應(yīng)用系統(tǒng)。
2、應(yīng)用系統(tǒng)如果檢查到用戶沒有在自己的服務(wù)器登錄,則將用戶請求重定向到單點登錄服務(wù)器上。(使用重定向就可以處理各服務(wù)器跨域的情況)
3、單點登錄服務(wù)器檢查到用戶已經(jīng)單點登錄(如果用戶沒有單點登錄則要求用戶登錄,登錄標(biāo)志存儲為客戶端瀏覽器的Cookie),找到該用戶在相應(yīng)應(yīng)用系統(tǒng)上綁定的賬號。
4、單點登錄服務(wù)器根據(jù)第三步的結(jié)果生成用戶令牌,重定向回應(yīng)用系統(tǒng)。
5、應(yīng)用系統(tǒng)接收統(tǒng)一格式的用戶令牌,取得用戶在本系統(tǒng)上的登錄賬號,將用戶在本系統(tǒng)上狀態(tài)置為登錄,返回用戶請求訪問的頁面。
如果用戶在訪問應(yīng)用系統(tǒng)之前已經(jīng)在單點登錄服務(wù)器上登錄過,第二步到第四布對用戶來說就是透明的,用戶感覺只是向應(yīng)用系統(tǒng)發(fā)出了訪問請求,然后得到了頁面反饋。
4 實現(xiàn)
(略)
5 總結(jié)
本方案設(shè)計的用戶單點登錄系統(tǒng)做到了:
- 真正了實現(xiàn)單點登錄、全網(wǎng)訪問,方便用戶的使用過程。
- 各系統(tǒng)之間耦合度低,應(yīng)用系統(tǒng)的改造不破壞其固有流程和結(jié)構(gòu),整個系統(tǒng)的實施過程安全平滑。
- 統(tǒng)一了單點登錄服務(wù)器到應(yīng)用服務(wù)器的用戶認(rèn)證信息訪問標(biāo)準(zhǔn),統(tǒng)一了令牌安全加密的傳輸和識別標(biāo)準(zhǔn),為將來更多應(yīng)用系統(tǒng)提供了統(tǒng)一的單點登錄框架。
- 整合了過去分散在各應(yīng)用系統(tǒng)中雖然有內(nèi)在關(guān)聯(lián)卻難以判別的用戶信息資源,為更進(jìn)一步的用戶個性化服務(wù)打下了基礎(chǔ)。