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