每個(gè)應用系統都有其自身的用戶(hù)系統和認證方式。程序員在為某個(gè)應用系統編寫(xiě)接入其它應用系統的程序代碼時(shí),常常為用戶(hù)認證大傷腦筋。問(wèn)題主要表現在以下幾方面:
1.讓最終用戶(hù)頻繁登錄? 但這似乎是一個(gè)讓用戶(hù)很難接受的解決方案。
2.在代碼中內置用戶(hù)名和密碼? 但代碼需要隨用戶(hù)和密碼的變化經(jīng)常維護,同時(shí)在很多場(chǎng)合下,用戶(hù)名和密碼對于程序員來(lái)說(shuō)是不可見(jiàn)的。
如何解決這一問(wèn)題呢?我們從目前和未來(lái)的應用發(fā)展趨勢判斷認為,應當開(kāi)發(fā)一個(gè)統一身份認證服務(wù),以解決這一應用集成中碰到的用戶(hù)認證問(wèn)題。這個(gè)服務(wù)需要達到以下功能和目標:
1. 支持Web服務(wù)技術(shù)框架,使得在對各個(gè)應用系統實(shí)施基于Web服務(wù)的應用集成(EAI/B2Bi)的時(shí)候,能夠使用這個(gè)統一身份認證服務(wù),進(jìn)行身份認證。
2. 方便使用,能夠盡可能地利用現有系統的身份認證模塊及現有的用戶(hù)設置和權限設置,盡量保護現有的投資,減少新用戶(hù)設置和權限設置的費用。同時(shí)避免對現有系統進(jìn)行大規模的修改。
3. 具有良好的擴展性和可集成性,不僅能支持現有的應用系統及用戶(hù)系統,當有新的企業(yè)應用被部署或開(kāi)發(fā)的時(shí)候,這個(gè)統一身份認證服務(wù)還可以作為其身份認證模塊的形式工作。也就是說(shuō),新的企業(yè)應用可以不自帶用戶(hù)系統,可以通過(guò)集成該服務(wù)的形式來(lái)實(shí)現等價(jià)的功能。
4. 應當具備靈活和方便的使用模式,使用者可以通過(guò)多種方式自由地使用該統一身份認證服務(wù)。
解決方案
根據這個(gè)統一身份認證服務(wù)的目標和初步的功能定義,將這個(gè)服務(wù)設計為圖1所示。

該服務(wù)主要需要具備三項功能:
1. 用戶(hù)注冊,用戶(hù)在統一身份認證服務(wù)中注冊賬號。以后這個(gè)賬號可以在所有使用統一身份認證服務(wù)的應用系統中使用。
2. 賬號關(guān)聯(lián)。如果用戶(hù)之前已經(jīng)在相關(guān)的應用系統中擁有賬號,同時(shí)也已經(jīng)設置了相應的權限,那么用戶(hù)能夠將這些應用系統的賬號與統一身份認證服務(wù)的賬號進(jìn)行關(guān)聯(lián),使得用戶(hù)登錄統一身份認證服務(wù)之后,就能夠自動(dòng)使用相關(guān)的應用系統用戶(hù)來(lái)訪(fǎng)問(wèn)應用系統。
3. 用戶(hù)認證。為應用系統提供用戶(hù)身份認證,應兼顧以下兩個(gè)應用方式:
◆ 應用系統使用統一身份認證服務(wù)作為它的用戶(hù)系統,用戶(hù)與應用系統進(jìn)行交互,并進(jìn)行登錄操作,應用系統將用戶(hù)提供的用戶(hù)名、密碼等轉發(fā)給統一身份認證服務(wù)以檢驗其是否通過(guò)授權。
◆ 用戶(hù)首先登錄統一身份認證服務(wù),并獲取權限令牌,然后可以使用這個(gè)權限令牌訪(fǎng)問(wèn)其它應用系統,應用系統接收該權限令牌時(shí)應當與統一身份認證服務(wù)進(jìn)行交互,以檢驗訪(fǎng)問(wèn)的合法性。
按照以上的功能描述,可以確定統一身份認證服務(wù)中需要考慮的實(shí)體包括:
1. 用戶(hù)(User),即統一身份認證服務(wù)的用戶(hù)。
2. 賬號(Account),即應用系統的賬號,與統一身份認證服務(wù)的用戶(hù)相關(guān)聯(lián)。一個(gè)用戶(hù)可以關(guān)聯(lián)多個(gè)賬號。
3. 應用系統(Application),使用統一身份認證服務(wù)的應用系統。
4. 會(huì )話(huà)(Session),當用戶(hù)登錄統一身份認證服務(wù)后,即創(chuàng )建了一個(gè)活躍的會(huì )話(huà),并獲得會(huì )話(huà)的認證令牌。在這個(gè)會(huì )話(huà)中,用戶(hù)可以使用會(huì )話(huà)的認證令牌訪(fǎng)問(wèn)各種應用系統。
用戶(hù)注冊
用戶(hù)注冊(包括用戶(hù)更新注冊信息)的流程主要包含兩個(gè)流程:新用戶(hù)注冊和用戶(hù)更新注冊信息。
賬號關(guān)聯(lián)
賬號關(guān)聯(lián)操作可以使用圖2所示的形式來(lái)表示。圖2中僅包含一個(gè)登記新的賬號關(guān)聯(lián)的操作,相關(guān)的修改、刪除操作已被省略。

登記新的賬號關(guān)聯(lián):
1. 用戶(hù)向統一身份認證服務(wù)發(fā)出賬號關(guān)聯(lián)注冊請求,用戶(hù)提供了應用系統的標識A,同時(shí)提供了可以在該應用系統中使用的用戶(hù)信息(如用戶(hù)名和密碼等)。
2. 服務(wù)首先向該應用系統A征詢(xún),用戶(hù)信息是否合法。如果合法則響應服務(wù)。
3. 如果收到合法響應,那么服務(wù)就將這個(gè)賬號關(guān)聯(lián)注冊信息保存到用戶(hù)注冊庫中,在該用戶(hù)登錄統一身份認證服務(wù)之后,就能夠使用相應的應用系統A。
4. 當注冊庫完成保存操作后,統一身份認證服務(wù)響應用戶(hù),最后注冊完成。
身份認證組件模式
統一身份認證服務(wù)的一個(gè)基本應用模式是以應用系統的身份認證組件的形式工作。在這個(gè)應用模式下,處在主導地位的是應用系統。在該情況下,應用系統自身沒(méi)有用戶(hù)系統,因此模式下涉及的賬號一定是統一身份認證服務(wù)的用戶(hù)賬號。
流程描述如下 (如圖3,僅描述正常流程) :

1. 用戶(hù)使用在統一認證服務(wù)注冊的用戶(hù)名和密碼(也可能是其它授權信息,比如數字簽名等)登陸應用系統A。
2. 應用系統A將用戶(hù)名和密碼連同自己的標識(應用系統A的標識)一起轉發(fā)給統一認證服務(wù),要求統一認證服務(wù)完成登錄操作。
3. 統一認證服務(wù)核查自己的應用系統注冊庫(使用UDDI Registry),看看應用系統A是否已經(jīng)是統一認證服務(wù)的用戶(hù)系統。同時(shí)在用戶(hù)注冊庫中核查由應用系統A轉發(fā)過(guò)來(lái)的用戶(hù)名和密碼。
4. 待核查完畢后,統一認證服務(wù)響應應用系統A,登錄完成。
5. 應用系統A創(chuàng )建一個(gè)系統會(huì )話(huà)(Session,系統A自己的機制),并將應用系統A自己的權限令牌返回給用戶(hù)。以后用戶(hù)端可以通過(guò)這個(gè)權限令牌持續訪(fǎng)問(wèn)應用系統A,直至登出系統或是會(huì )話(huà)超時(shí)。
統一認證模式
統一認證模式是以統一身份認證服務(wù)為核心的服務(wù)使用模式。用戶(hù)登錄統一身份認證服務(wù)后,即可使用所有支持統一身份認證服務(wù)的應用系統。
流程描述如下 (如圖4,僅描述正常流程):

1. 用戶(hù)使用在統一認證服務(wù)注冊的用戶(hù)名和密碼(也可能是其他的授權信息,比如數字簽名等)登陸統一認證服務(wù);
2. 統一認證服務(wù)創(chuàng )建了一個(gè)會(huì )話(huà),同時(shí)將與該會(huì )話(huà)關(guān)聯(lián)的訪(fǎng)問(wèn)認證令牌返回給用戶(hù);
3. 用戶(hù)使用這個(gè)訪(fǎng)問(wèn)認證令牌訪(fǎng)問(wèn)某個(gè)支持統一身份認證服務(wù)的應用系統;
4. 該應用系統將訪(fǎng)問(wèn)認證令牌傳入統一身份認證服務(wù),認證訪(fǎng)問(wèn)認證令牌的有效性;
5. 統一身份認證服務(wù)確認認證令牌的有效性;
6. 應用系統接收訪(fǎng)問(wèn),并返回訪(fǎng)問(wèn)結果,如果需要提高訪(fǎng)問(wèn)效率的話(huà),應用系統可選擇返回其自身的認證令牌已使得用戶(hù)之后可以使用這個(gè)私有令牌持續訪(fǎng)問(wèn)。
此外,關(guān)于訪(fǎng)問(wèn)認證令牌的失效,有兩個(gè)策略:一個(gè)是由用戶(hù)主動(dòng)發(fā)起聲明,聲明其擁有的訪(fǎng)問(wèn)認證令牌不再有效,這類(lèi)似注銷(xiāo)的操作;另一個(gè)是用戶(hù)一段時(shí)間內沒(méi)有使用這個(gè)認證令牌,認證令牌自動(dòng)失效,這類(lèi)似超時(shí)的處理。
信任代理模式
在Internet應用環(huán)境下,安全性和信任的重要性是顯而易見(jiàn)的,對于商用系統而言,避免非法訪(fǎng)問(wèn)和入侵是他所需要考慮的幾個(gè)重要問(wèn)題之一,沒(méi)有比商用數據丟失或是商用系統被違規使用更糟糕的了。
在信任代理模式下,一個(gè)組織可以為他所有需要提供安全信任保障的應用系統設置一個(gè)統一身份認證服務(wù),對這些應用系統的訪(fǎng)問(wèn)全部由統一身份認證服務(wù)代理。
流程描述如下(如圖5,僅描述正常流程):

1. 用戶(hù)使用在統一認證服務(wù)注冊的用戶(hù)名和密碼(也可能是其他的授權信息,比如數字簽名等)登陸統一認證服務(wù);
2. 統一認證服務(wù)創(chuàng )建了一個(gè)會(huì )話(huà),同時(shí)將與該會(huì )話(huà)關(guān)聯(lián)的訪(fǎng)問(wèn)認證令牌返回給用戶(hù);
3. 用戶(hù)使用這個(gè)訪(fǎng)問(wèn)認證令牌訪(fǎng)問(wèn)某個(gè)支持統一身份認證服務(wù)的應用系統,不過(guò)用戶(hù)并不將請求消息直接交給應用系統,而是傳給統一身份認證服務(wù),在消息中標識了最終的應用系統的ID。
4. 統一認證服務(wù)訪(fǎng)問(wèn)應用系統注冊庫(UDDI Registry),獲取了應用系統的訪(fǎng)問(wèn)入口(統一認證服務(wù)可以將這個(gè)訪(fǎng)問(wèn)入口緩存在本地,以減少以后與應用系統注冊庫的交互次數),并確認這個(gè)應用系統的確是支持統一身份認證服務(wù)的。
5. 統一認證服務(wù)將請求消息轉發(fā)給指定的應用系統,如果該應用系統使用自己的用戶(hù)系統的話(huà),那么該消息應當包含了預先定義好的相關(guān)聯(lián)的用戶(hù)名和密碼等。
6. 應用系統將請求結果返回給統一認證服務(wù),最后統一認證服務(wù)將響應消息返回給用戶(hù),完成調用。
在該模式下,所有應用系統僅接收來(lái)自統一認證服務(wù)的訪(fǎng)問(wèn)請求。這樣,解決方案提供商可以將主要的安全方面的投入部署在統一認證服務(wù)那端。
使用Web服務(wù)架構
由于統一身份認證服務(wù)可能被應用的領(lǐng)域包括:
◆ 企業(yè)內部的各種應用
◆ 跨國企業(yè)的各個(gè)部門(mén)或地區分公司的各種應用
◆ 行業(yè)內各個(gè)企業(yè)的不同應用
◆ Internet上豐富的應用環(huán)境
無(wú)論是何種應用環(huán)境,都將面對不同的平臺、不同的系統和不同的編程環(huán)境,要能最大可能地支持所有的平臺、系統和編程環(huán)境,同時(shí)又要確保服務(wù)的實(shí)現代價(jià)保持相對固定。那么目前看來(lái),選擇基于規范的Web服務(wù)解決方案將是最佳的選擇。
聯(lián)系客服