摘 要: 分析了現(xiàn)存多種SSO技術(shù)的優(yōu)缺點(diǎn),針對(duì)用戶跨系統(tǒng)操作較多的分布式系統(tǒng),提出了一種基于Web Service的以權(quán)限管理為核心的輕量級(jí)的單點(diǎn)登錄實(shí)現(xiàn)方法。通過(guò)在某航空呼叫中心中的運(yùn)用實(shí)踐,很好地說(shuō)明了該方法的實(shí)用性。
關(guān)鍵詞: 單點(diǎn)登錄; 統(tǒng)一認(rèn)證; 訪問(wèn)控制; Web Service
在分布式構(gòu)架的軟件環(huán)境下,各協(xié)同站點(diǎn)都擁有各自的用戶數(shù)據(jù)庫(kù),為解決同一用戶在使用不同站點(diǎn)功能時(shí)需多次輸入用戶密碼所帶來(lái)的安全與管理不便的問(wèn)題,單點(diǎn)登錄機(jī)制提供了安全有效的途徑。所謂單點(diǎn)登錄,即用戶在訪問(wèn)多個(gè)系統(tǒng)功能時(shí)只需進(jìn)行一次登錄操作, 就可獲得所需訪問(wèn)應(yīng)用系統(tǒng)和資源的授權(quán), 不必多次輸入用戶名和密碼來(lái)確定用戶身份,即“一次登錄,多處漫游”。應(yīng)用單點(diǎn)登錄機(jī)制可有效實(shí)現(xiàn)統(tǒng)一認(rèn)證和資源訪問(wèn)控制。
1 一般單點(diǎn)登錄模型
現(xiàn)有的實(shí)現(xiàn)SSO的產(chǎn)品和方案眾多,典型代表有微軟的Passport和自由聯(lián)盟計(jì)劃[1]。Passport單點(diǎn)登錄技術(shù)是Microsoft的重要組成部分。它主要采用集中式認(rèn)證,分布式授權(quán)方案實(shí)現(xiàn)。從根本上說(shuō), Passport屬于一種基于訪問(wèn)票據(jù)的集中式單點(diǎn)登錄模式,所有的用戶信息都存放在Passort.com中, 由Passort.com負(fù)責(zé)統(tǒng)一的身份驗(yàn)證。自由聯(lián)盟計(jì)劃(Liberty Alliance Project)與Passport不同,它是基于SMAL標(biāo)準(zhǔn)的一個(gè)面向Web應(yīng)用單點(diǎn)登錄的、與平臺(tái)無(wú)關(guān)的開(kāi)放協(xié)議,沒(méi)有設(shè)立中心位置的認(rèn)證系統(tǒng),它建立了協(xié)作站點(diǎn)與認(rèn)證系統(tǒng)的聯(lián)盟關(guān)系,兩個(gè)Web應(yīng)用之間可以保留原來(lái)的用戶認(rèn)證機(jī)制, 通過(guò)建立它們各自身份的對(duì)應(yīng)關(guān)系來(lái)達(dá)到SSO的目的。自由聯(lián)盟計(jì)劃雖然靈活性很高,但也因其過(guò)于自由的聯(lián)盟組織,當(dāng)聯(lián)盟系統(tǒng)過(guò)多時(shí)將給管理帶來(lái)不便。
除了以上兩個(gè)比較有代表性的產(chǎn)品外,目前實(shí)現(xiàn)SSO的典型模型包括經(jīng)紀(jì)人模型、代理模型、代理和經(jīng)紀(jì)人模型、網(wǎng)關(guān)模型以及令牌模型[2]。其中,經(jīng)濟(jì)人模型與Passport實(shí)現(xiàn)方案類似,采用集中式管理,但是對(duì)舊系統(tǒng)改造較大;代理模型要在每個(gè)舊系統(tǒng)上添加一個(gè)代理,可移植性好,但管理相對(duì)困難;代理和經(jīng)紀(jì)人模型結(jié)合了以上兩者的優(yōu)點(diǎn),移植性好、管理相對(duì)集中;網(wǎng)關(guān)模式需要一臺(tái)專門的網(wǎng)關(guān),多個(gè)網(wǎng)關(guān)同步數(shù)據(jù)庫(kù)比較困難;代理模式因?yàn)樾枰黾有碌慕M件所以也增加了新的管理負(fù)擔(dān),但卻增加了系統(tǒng)的安全性。
2 本文方案
通過(guò)分析并權(quán)衡上述SSO模型的優(yōu)缺點(diǎn),針對(duì)某些大型企業(yè)內(nèi)部協(xié)同合作站點(diǎn)相對(duì)固定且相對(duì)獨(dú)立,需要維護(hù)獨(dú)立的用戶數(shù)據(jù)庫(kù),同時(shí)又有整個(gè)分布式系統(tǒng)環(huán)境下某些角色需跨系統(tǒng)操作且跨系統(tǒng)操作較多的特點(diǎn),本文提出了一種基于Web Service和票據(jù)的集中授權(quán),分布驗(yàn)證的單點(diǎn)登錄實(shí)現(xiàn)方法。
2.1 Web Service技術(shù)
Web Service是一種輕量級(jí)的獨(dú)立的通信技術(shù), 是符合某些標(biāo)準(zhǔn)的分布式應(yīng)用構(gòu)件,這些標(biāo)準(zhǔn)使它們能夠在外部被訪問(wèn),并且能夠解決某些類型的行業(yè)問(wèn)題。通過(guò)簡(jiǎn)單對(duì)象存取協(xié)議SOAP(Simple Object Access Protoco)在Web上提供的軟件服務(wù), 使用WSDL文件進(jìn)行說(shuō)明, 并通過(guò)UDDI進(jìn)行注冊(cè)[3-4]。如圖1 所示, 用戶通過(guò)UDDI找到某應(yīng)用的WSDL描述文檔后, 便可以通過(guò)SOAP調(diào)用該應(yīng)用提供的Web服務(wù)中的一個(gè)或多個(gè)操作。
Web Service[5]在體系結(jié)構(gòu)、設(shè)計(jì)、實(shí)現(xiàn)與部署等方面都比傳統(tǒng)的分布式對(duì)象技術(shù)更加合理,它對(duì)外提供了可調(diào)用的接口,允許外來(lái)用戶訪問(wèn)敏感信息和控制業(yè)務(wù)邏輯,雖然與傳統(tǒng)的Web開(kāi)發(fā)方式相比,Web Service構(gòu)建的商務(wù)邏輯更加開(kāi)放和標(biāo)準(zhǔn)化,但其在安全性上表現(xiàn)出的弱點(diǎn)也給使用者帶來(lái)很大難題。本文通過(guò)Web Service接口暴露的方法來(lái)實(shí)現(xiàn)系統(tǒng)間部分功能的協(xié)同作用,特別是各系統(tǒng)權(quán)限的管理也依靠Web Service技術(shù)實(shí)現(xiàn),因而首先要考慮其訪問(wèn)控制上的安全性問(wèn)題。
基于SOAP的訪問(wèn)控制,多數(shù)解決方案利用了SOAP基于XML的特點(diǎn)[5],在很多方面通過(guò)XML加密、簽名等安全技術(shù)對(duì)SOAP協(xié)議Header和Body進(jìn)行擴(kuò)展來(lái)實(shí)現(xiàn)其安全性的增強(qiáng)。本文采用Damiani等人[6]提出的基于SOAP消息的過(guò)濾機(jī)制,通過(guò)校驗(yàn)SOAP頭中的認(rèn)證信息,過(guò)濾、修改,將SOAP消息轉(zhuǎn)化為RMA(遠(yuǎn)程調(diào)用)以實(shí)現(xiàn)對(duì)本地組件的訪問(wèn)控制。提供服務(wù)的服務(wù)器端由SOAP網(wǎng)關(guān)和本地組件組成,請(qǐng)求服務(wù)的SOAP消息到來(lái)時(shí),首先要被SOAP網(wǎng)關(guān)截獲經(jīng)過(guò)解析驗(yàn)證后實(shí)現(xiàn)對(duì)Web服務(wù)的訪問(wèn)控制。通過(guò)校驗(yàn)的請(qǐng)求遠(yuǎn)程調(diào)用本地接口。其過(guò)程如圖2所示。
2.2 權(quán)限管理
企業(yè)內(nèi)部各系統(tǒng)間進(jìn)行協(xié)同合作,資源訪問(wèn)控制是一個(gè)極其重要的問(wèn)題。而進(jìn)行資源訪問(wèn)控制首先要授予用戶在各協(xié)同站點(diǎn)間的資源訪問(wèn)權(quán)限,規(guī)定其可訪問(wèn)的頁(yè)面資源,可進(jìn)行的操作。由于內(nèi)部站點(diǎn)間合作密切,一個(gè)用戶可能擁有多個(gè)系統(tǒng)的某些或全部功能權(quán)限。本文對(duì)權(quán)限的授予通過(guò)角色分配實(shí)現(xiàn),使某種角色的用戶擁有同一類資源訪問(wèn)權(quán)限,同一類資源訪問(wèn)權(quán)限可能跨越多個(gè)系統(tǒng),集中地對(duì)所有權(quán)限進(jìn)行分配,使得分工明確,便于管理。
建立專門的權(quán)限管理系統(tǒng)是集中對(duì)跨域用戶進(jìn)行權(quán)限管理的有效方案,將各系統(tǒng)擁有跨域操作權(quán)限的用戶導(dǎo)入權(quán)限系統(tǒng),并對(duì)這些用戶及用戶權(quán)限通過(guò)遠(yuǎn)程調(diào)用接口進(jìn)行增加、刪除、修改和查詢。由于各個(gè)系統(tǒng)也分別擁有各自的用戶數(shù)據(jù)庫(kù)并擁有獨(dú)立的角色分配模塊,系統(tǒng)在整合時(shí)保留了各自系統(tǒng)管理員對(duì)本系統(tǒng)權(quán)限的分配管理,同時(shí)運(yùn)用Web Service技術(shù),在該系統(tǒng)與權(quán)限系統(tǒng)之間分別建立Web Service客戶端和服務(wù)器端,同步權(quán)限系統(tǒng)對(duì)該系統(tǒng)用戶權(quán)限角色的修改。同時(shí)當(dāng)用戶登錄系統(tǒng)對(duì)協(xié)作系統(tǒng)受保護(hù)資源進(jìn)行訪問(wèn)時(shí),也需要通過(guò)Web Service調(diào)用接口以判斷用戶是否擁有該權(quán)限,這時(shí)權(quán)限系統(tǒng)就成了服務(wù)提供者,其他系統(tǒng)就是服務(wù)請(qǐng)求的客戶端了。
而對(duì)協(xié)作系統(tǒng)頁(yè)面的資源訪問(wèn)控制,則采用單點(diǎn)登錄技術(shù)。擁有跨域權(quán)限的用戶存儲(chǔ)在中心權(quán)限管理系統(tǒng)的數(shù)據(jù)庫(kù)中,權(quán)限管理系統(tǒng)為其分配訪問(wèn)協(xié)作系統(tǒng)的權(quán)限時(shí),通過(guò)Web Service增加特定協(xié)作系統(tǒng)帳號(hào)到該用戶本系統(tǒng)的帳號(hào)關(guān)聯(lián)表,該帳號(hào)關(guān)聯(lián)表如表1所示。用戶登錄時(shí)首先調(diào)用權(quán)限管理系統(tǒng)的校驗(yàn)程序進(jìn)行校驗(yàn),成功后,即主動(dòng)查詢本系統(tǒng)數(shù)據(jù)庫(kù)中的帳號(hào)關(guān)聯(lián)表,取出所有協(xié)作系統(tǒng)的帳號(hào)和密碼進(jìn)行加密、封裝成票據(jù)并保存在Coockie中以供下次訪問(wèn)其他系統(tǒng)時(shí)直接從Coockie中獲取使用。
2.3 Coockie和Ticket
單點(diǎn)登錄的思想是使用戶只需登錄一次就可訪問(wèn)協(xié)同系統(tǒng)中的授權(quán)資源,這就需要記錄用戶登錄成功的信息,HTTP協(xié)議本身是基于請(qǐng)求/響應(yīng)模式的,無(wú)狀態(tài)的協(xié)議,因而必須采用某種跟蹤機(jī)制用于記錄用戶登錄成功信息。本文采用Coockie存儲(chǔ)用戶成功登入的信息,當(dāng)用戶驗(yàn)證成功后,后臺(tái)自動(dòng)查詢賬號(hào)關(guān)聯(lián)表,并將帳號(hào)關(guān)聯(lián)信息經(jīng)加密后形成SSO Ticket以約定的方式分別存儲(chǔ)在相應(yīng)的Coockie中,以備協(xié)同系統(tǒng)使用。要取得Coockie中的Ticket信息,就要知道對(duì)應(yīng)系統(tǒng)Coockie存放的位置。這就需要各協(xié)同系統(tǒng)對(duì)這些協(xié)同系統(tǒng)的Coockie存放位置進(jìn)行約定,并將這些信息存儲(chǔ)在數(shù)據(jù)庫(kù)中。該協(xié)同系統(tǒng)Coockie信息表結(jié)構(gòu)如表2所示。
Ticket為密文,存放協(xié)同合作系統(tǒng)的帳戶信息,包括系統(tǒng)名、用戶名、密碼。加密Ticket前應(yīng)對(duì)Ticket的格式進(jìn)行約定以便于提取使用,如設(shè)為:系統(tǒng)名&&用戶名&&密碼。
3 實(shí)驗(yàn)分析
航空公司業(yè)務(wù)比較復(fù)雜,不同的業(yè)務(wù)類型分布在不同的系統(tǒng)上,實(shí)現(xiàn)一個(gè)特定的業(yè)務(wù)流程往往需要協(xié)同合作多個(gè)系統(tǒng),所以資源訪問(wèn)控制是非常重要的問(wèn)題。運(yùn)用上節(jié)提出的方案,航空公司內(nèi)部各系統(tǒng)如呼叫中心、投訴系統(tǒng)、B2C系統(tǒng)等協(xié)作站點(diǎn)都將權(quán)限管理工作集中到專門的權(quán)限管理系統(tǒng),通過(guò)在各個(gè)系統(tǒng)之間建入Web Service服務(wù)器端和客戶端,實(shí)現(xiàn)遠(yuǎn)程調(diào)用協(xié)同合作站點(diǎn)的功能接口,如判斷呼叫中心的座席是否有修改客戶信息的權(quán)利。對(duì)協(xié)同站點(diǎn)頁(yè)面資源的訪問(wèn)控制則可由SSO機(jī)制來(lái)實(shí)現(xiàn)。
3.1登錄流程
現(xiàn)代呼叫中心應(yīng)用了許多先進(jìn)的通信和計(jì)算機(jī)技術(shù),包括硬件和軟件方面的技術(shù)。本文所論及的呼叫中心只是航空公司整個(gè)呼叫中心的軟件系統(tǒng)實(shí)現(xiàn)部分。其實(shí)現(xiàn)需與公司其他相鄰系統(tǒng)進(jìn)行協(xié)同合作:如B2C系統(tǒng)、B2B系統(tǒng)、投訴系統(tǒng)、大客戶信息管理系統(tǒng)等。以座席為例,說(shuō)明使用呼叫中心系統(tǒng)時(shí)單點(diǎn)登錄的過(guò)程。流程圖如圖3所示。
(1) 首次登錄呼叫中心系統(tǒng),座席輸入用戶名和密碼信息。
(2)遠(yuǎn)程調(diào)用權(quán)限管理系統(tǒng)的驗(yàn)證程序進(jìn)行有效性校驗(yàn)。
(3) 若帳號(hào)驗(yàn)證有效,系統(tǒng)則自動(dòng)查詢?cè)搸粝滤袇f(xié)作系統(tǒng)的登錄帳號(hào)信息,以約定的組織格式:系統(tǒng)&&用戶名&&密碼經(jīng)DES加密后保存為Ticket,并通過(guò)查詢系統(tǒng)Coockie信息表獲得對(duì)應(yīng)系統(tǒng)存放Coockie的相關(guān)信息,分別查看瀏覽器中是否存有信息表中對(duì)應(yīng)的Coockie, 有則通過(guò)setCoockies方法將Ticket存入相應(yīng)Coockie并覆蓋之,無(wú)則創(chuàng)建該Coockie并存入指定位置。若帳號(hào)信息驗(yàn)證無(wú)效,返回(1)。
(4) 訪問(wèn)其他協(xié)作系統(tǒng)時(shí),通過(guò)getCoockie獲取相應(yīng)Coockie,若獲取成功,則解密Ticket分解出帳戶信息進(jìn)行登錄驗(yàn)證操作,若獲取不成功,說(shuō)明該用戶角色無(wú)此資源訪問(wèn)權(quán)限。
在本方案的整個(gè)流程中, 除了最初輸入的用戶名和密碼外, 其他每次登錄系統(tǒng)時(shí)所需帳戶信息都是通過(guò)獲取客戶機(jī)端對(duì)應(yīng)的Coockie中存儲(chǔ)的帳戶信息進(jìn)行。關(guān)閉瀏覽器時(shí)刪除所有Coockie信息,即登出系統(tǒng)。
3.2 性能分析
評(píng)價(jià)SSO系統(tǒng)主要考慮其可實(shí)施性、可管理性、安全性和易用性[7] 。本文使用專門的權(quán)限管理系統(tǒng)對(duì)所有協(xié)同合作系統(tǒng)中的用戶及其權(quán)限統(tǒng)一管理,各系統(tǒng)保持其原有用戶存儲(chǔ)和驗(yàn)證方式,對(duì)有需要進(jìn)行跨域操作的系統(tǒng)中增加Web Service客戶端遠(yuǎn)程調(diào)用權(quán)限系統(tǒng)的校驗(yàn)接口進(jìn)行有效性校驗(yàn),主調(diào)系統(tǒng)主動(dòng)保存所有協(xié)作系統(tǒng)的登錄信息到Coockie,在需要訪問(wèn)時(shí)直接獲取Coockie中對(duì)應(yīng)系統(tǒng)信息進(jìn)行對(duì)應(yīng)系統(tǒng)本地驗(yàn)證,這有別于已有的集中式單點(diǎn)登錄方案,只需調(diào)用系統(tǒng)原有校驗(yàn)程序而不需在跨域時(shí)調(diào)用權(quán)限系統(tǒng)進(jìn)行校驗(yàn),可大大減少多用戶并行操作時(shí)權(quán)限管理系統(tǒng)的負(fù)擔(dān)。權(quán)限系統(tǒng)對(duì)各跨域用戶進(jìn)行權(quán)限的分配管理,各系統(tǒng)通過(guò)遠(yuǎn)程調(diào)用權(quán)限管理系統(tǒng)接口進(jìn)行權(quán)限的查詢。整個(gè)SSO驗(yàn)證用戶過(guò)程是受訪系統(tǒng)對(duì)用戶帳號(hào)的驗(yàn)證及通過(guò)Web Service技術(shù)遠(yuǎn)程調(diào)用權(quán)限系統(tǒng)的驗(yàn)證過(guò)程。因而與常見(jiàn)集中式認(rèn)證SSO系統(tǒng)相比,傳遞的Ticket信息包含SSO之前所需的用戶名密碼,驗(yàn)證程序也只需增加存儲(chǔ)登錄用戶協(xié)作系統(tǒng)對(duì)應(yīng)帳戶信息到相應(yīng)Coockie的功能,改動(dòng)較少,可實(shí)施性較強(qiáng)。對(duì)所有協(xié)同系統(tǒng)通過(guò)采用分步認(rèn)證與集中管理授權(quán),有較強(qiáng)的可管理性。通過(guò)加密票據(jù),并將其存放在對(duì)應(yīng)系統(tǒng)可訪問(wèn)域中,提供了簡(jiǎn)單的安全措施。另外,新增協(xié)同合作系統(tǒng)時(shí),只需對(duì)該系統(tǒng)的各角色創(chuàng)建新的用戶密碼,并在權(quán)限系統(tǒng)中將擁有該角色權(quán)限的其他系統(tǒng)用戶的帳戶關(guān)聯(lián)信息進(jìn)行更新即可,有較強(qiáng)的易用性。
本文基于Web Service技術(shù)在原有系統(tǒng)的基礎(chǔ)上,構(gòu)建了單點(diǎn)登錄機(jī)制。通過(guò)將SOAP消息轉(zhuǎn)換為RMA(遠(yuǎn)程調(diào)用)對(duì)系統(tǒng)間的Web服務(wù)進(jìn)行安全的訪問(wèn)控制,實(shí)現(xiàn)了用戶及權(quán)限的管理。同時(shí)使用Coockie,DES加密技術(shù)在系統(tǒng)間傳遞關(guān)聯(lián)帳號(hào)實(shí)現(xiàn)了單點(diǎn)登錄過(guò)程。實(shí)驗(yàn)表明,本文采用的方案具有良好的可管理性、可實(shí)施性、安全性和易用性。
參考文獻(xiàn)
[1] 毛捍東,張維明.一個(gè)基于Web服務(wù)的單點(diǎn)登錄系統(tǒng)[J]. 計(jì)算機(jī)工程與應(yīng)用,2004(24):18-20.
[2] DUBOISD, PRADEH. Putting rough sets and fuzzy sets together[M]. Dordrecht,Netherlands: KluwerAcademic Publishers,1992:203-222.
[3] GRECOS, MATARAZZOB, SLOW INSKIR. Fuzzy similarity relation as a basis for rough approximations[C] // Proceedings of RSCTC’98. Heidelberg: Springer Verlag,1998:283-289.
[4] 梁志罡.基于Webservice的混合架構(gòu)單點(diǎn)登錄的設(shè)計(jì)[J].計(jì)算機(jī)機(jī)應(yīng)用,2010.30(12):3363-3365.
[5] 許峰,林果園,黃皓. Web Service的訪問(wèn)控制研究綜述[J].計(jì)算機(jī)科學(xué),2005,32(2):1-4.
[6] SIRER E C, WANG K. An access control language for web services.In:Proc.of the ACM Symposium on Access Control Models and Technologies, ACM Press,2002:23-30.
[7] 張挺, 耿繼秀. Web 環(huán)境下的SSO 實(shí)現(xiàn)模式的研究[J]. 計(jì)算機(jī)仿真, 2005,22 (8):128-131.