張賽男
(中國(guó)人民解放軍理工大學(xué) 理學(xué)院,江蘇 南京 211100)
隨著Web服務(wù)的廣泛應(yīng)用,Web服務(wù)中的訪問(wèn)控制策略描述及實(shí)現(xiàn)顯得尤為重要。目前,Web服務(wù)安全標(biāo)準(zhǔn)以及其實(shí)現(xiàn)并不完善,Web服務(wù)安全多數(shù)交由作為應(yīng)用程序服務(wù)器的Web服務(wù)器的安全機(jī)制管理。例如,Tomcat服務(wù)器為用戶(hù)、組、角色的管理和為訪問(wèn)Java-Web應(yīng)用程序的權(quán)限提供了安全管理。但是,Tomcat中的授權(quán)是粗粒度的,也就是說(shuō),Tomcat不可能限制對(duì)Web服務(wù)的單個(gè)的訪問(wèn)操作。
本文通過(guò)示例,探討如何把一種新的安全模型應(yīng)用到Web服務(wù)中。這種新的安全模型提供了一種規(guī)范語(yǔ)言——視圖策略語(yǔ)言,其授權(quán)可以在Web服務(wù)單個(gè)的操作層次上細(xì)粒度地指定,同時(shí)授權(quán)還可以通過(guò)操作的調(diào)用動(dòng)態(tài)地改變。這種模型和Web服務(wù)相結(jié)合,能夠?qū)崿F(xiàn)Web服務(wù)下安全訪問(wèn)控制權(quán)限的動(dòng)態(tài)改變,改善目前靜態(tài)訪問(wèn)控制的問(wèn)題。
圖書(shū)中心系統(tǒng)是一個(gè)Web服務(wù)的簡(jiǎn)單應(yīng)用,其結(jié)構(gòu)如圖1所示。
圖書(shū)中心系統(tǒng)主要提供書(shū)店注冊(cè)服務(wù)、書(shū)店客戶(hù)注冊(cè)服務(wù)、書(shū)店處理客戶(hù)注冊(cè)請(qǐng)求服務(wù)、書(shū)店管理客戶(hù)借閱圖書(shū)信息服務(wù)和為所有的用戶(hù)查詢(xún)圖書(shū)信息的服務(wù)。其中書(shū)店注冊(cè)是其他所有服務(wù)的前提條件。
圖書(shū)中心系統(tǒng)的訪問(wèn)控制需求描述如下:
BusinessRegistration:書(shū)店經(jīng)理注冊(cè)自己的書(shū)店。這個(gè)注冊(cè)是其他所有服務(wù)的前提條件。
CustomerRegistration:書(shū)店的客戶(hù)向書(shū)店提交注冊(cè)申請(qǐng)。
CustomerRegistrationProcess:書(shū)店處理客戶(hù)的注冊(cè)申請(qǐng)。
CustomerBookList:書(shū)店僅能為自己的客戶(hù)使用此服務(wù)??蛻?hù)可以查詢(xún)己借閱清單,但不能在此清單上添加新的請(qǐng)求,只有店員可以添加客戶(hù)的借閱清單。
BookSearch:店員和客戶(hù)都能使用此服務(wù)查詢(xún)圖書(shū)信息。
基于視圖的訪問(wèn)控制VBAC(View-BasedAccess Control)模型是專(zhuān)門(mén)用于支持分布式訪問(wèn)控制策略的設(shè)計(jì)和管理的模型[1],圖2是VBAC的簡(jiǎn)易模型。VBAC模型可以看成是基于角色的訪問(wèn)控制RBAC(Role-Based Access Control)模型的擴(kuò)展,VBAC增加了視圖以及模式的概念。視圖描述的是對(duì)訪問(wèn)對(duì)象的授權(quán),視圖被分配給角色。如果一個(gè)主體所扮演的角色擁有對(duì)某個(gè)對(duì)象訪問(wèn)的視圖,則這個(gè)主體就可以訪問(wèn)此對(duì)象。如果這個(gè)角色沒(méi)有這個(gè)視圖,則這個(gè)主體就不能訪問(wèn)此對(duì)象。模式描述的是視圖和角色動(dòng)態(tài)的分配以及刪除。
圖2 VBAC模型
視圖策略語(yǔ)言VPL(View Policy Language)是一種說(shuō)明性的語(yǔ)言,用于描述VBAC策略。VPL用于描述角色、視圖以及模式。角色在角色聲明roles之后,視圖以及模式聲明使用關(guān)鍵字view和schema。
角色聲明描述了策略中的角色以及這些角色初始擁有的視圖。圖3是圖書(shū)中心的角色聲明。這個(gè)例子中有customer和staff兩個(gè)角色。 staff繼承了customer,customer能夠調(diào)用的操作,staff也可以調(diào)用。staff擁有初始視圖 BusinessRegistratoin,關(guān)鍵字holds來(lái)說(shuō)明角色擁有視圖,而customer沒(méi)有初始視圖。
圖3 VPL角色聲明
圖4是圖書(shū)中心的訪問(wèn)控制需求的VPL視圖聲明,關(guān)鍵字controls引導(dǎo)的是一個(gè)類(lèi)或者接口。例如,視圖BusinessRegistration允許調(diào)用類(lèi)BusinessRegistration的操作processRegisterRequest。VPL視圖可以靜態(tài)地被限制給特定的角色,這些角色羅列在關(guān)鍵字restricted to后面。例如,視圖BusinessRegistration只能被賦給角色staff而不能賦給 customer。
VPL對(duì)被描述的授權(quán)操作的參數(shù)沒(méi)有限制,即不需要全部參數(shù)才能調(diào)用某個(gè)操作。例如,調(diào)用操作getCustomerGUID僅需要書(shū)店的loginBusinessID就能獲取到自己書(shū)店的所有客戶(hù)的信息。因?yàn)?,?shū)店在注冊(cè)以后有對(duì)應(yīng)的loginBusinessID。由于基于CORBA的應(yīng)用程序,都會(huì)采取為每個(gè)客戶(hù)端在服務(wù)器端創(chuàng)建一個(gè)對(duì)象的設(shè)計(jì)模式。因此,客戶(hù)端與創(chuàng)建的對(duì)象進(jìn)行通信無(wú)需身份驗(yàn)證。例如,在這個(gè)例子中,每個(gè)客戶(hù)端在服務(wù)器端都有一個(gè)CustomerRegistrationProcess對(duì)象,由于SOAP對(duì)面向?qū)ο笾С值木窒扌裕瑢oginBusinessID作為一個(gè)參數(shù)給出。
圖4 VPL視圖定義
因此,研究擴(kuò)展VPL來(lái)說(shuō)明操作被調(diào)用的時(shí)候所必須具備的條件是在操作后添加if caller=param來(lái)指定必備條件。這個(gè)表達(dá)式中,關(guān)鍵字caller表示此操作調(diào)用者的ID,param表示操作的實(shí)參。調(diào)用者由一個(gè)整數(shù)表示其身份。如果操作的某個(gè)參數(shù)不是必須的,用”-”表示;如果視圖中操作參數(shù)沒(méi)有任何條件限制,則VPL視圖中僅有操作名稱(chēng)的標(biāo)識(shí)符,而沒(méi)有參數(shù)列表。例如,視圖BusinessRegistration中的操作processRegisterProcess就屬于這一類(lèi)型。
依據(jù)服務(wù) CustomerBookList,角色 staff和 customer有不同的訪問(wèn)需求。staff可以調(diào)用processAddRequest以及processQueryRequest兩個(gè)操作,但是customer僅能調(diào)用processQueryRequest。視圖CustomerBookListFull確定其使用角色是staff,可以擁有兩個(gè)操作,而CustomerBookListRestricted沒(méi)有角色的限制。如果視圖被調(diào)用,customer僅能查詢(xún)自己借閱的書(shū)。
VPL模式(VPL Schema)為動(dòng)態(tài)訪問(wèn)控制建立模型。它描述給定的操作被調(diào)用后帶來(lái)角色授權(quán)的改變,而角色不能擁有某個(gè)視圖,用assign視圖from角色表示;反之,用assign視圖to角色表示。圖5表示調(diào)用完操作processRegisterRequest后,將CustomerRegistrationProcess等視圖授權(quán)給角色staff,而將CustomerBookListRestricted等視圖授權(quán)給角色customer,即表示了訪問(wèn)控制權(quán)限動(dòng)態(tài)地改變。
圖5 VPL模式聲明
這部分描述在Web服務(wù)下執(zhí)行VPL表示的訪問(wèn)控制策略的基礎(chǔ)結(jié)構(gòu)。這個(gè)結(jié)構(gòu)中包含了執(zhí)行VPL所描述策略的Raccoon[2]結(jié)構(gòu)。
Raccoon結(jié)構(gòu)包含了處理VPL策略的開(kāi)發(fā)工具以及定義角色視圖的存儲(chǔ)庫(kù)(即角色、視圖服務(wù)器)。視圖角色服務(wù)器可以使用圖形管理工具來(lái)處理,訪問(wèn)控制決策依據(jù)這些存儲(chǔ)庫(kù)來(lái)決定。
圖6為Raccoon結(jié)構(gòu)的主要部分。角色服務(wù)器包含了用戶(hù)所有的角色證書(shū),當(dāng)一個(gè)客戶(hù)在系統(tǒng)中認(rèn)證時(shí),客戶(hù)得到所有屬于自己的角色證書(shū);而當(dāng)客戶(hù)端調(diào)用服務(wù)器端的某個(gè)操作時(shí),相應(yīng)的角色證書(shū)被傳送。此調(diào)用由攔截器攔截,攔截器傳送客戶(hù)端信息給訪問(wèn)決策對(duì)象。如果客戶(hù)端被準(zhǔn)許調(diào)用此操作,訪問(wèn)決策對(duì)象依據(jù)給出的角色以及策略來(lái)決策。請(qǐng)求策略分布在服務(wù)器上,如果策略允許客戶(hù)調(diào)用操作,那么攔截器給服務(wù)器發(fā)送一個(gè)請(qǐng)求;如果不允許,則此訪問(wèn)被拒絕。
圖6 Raccoon結(jié)構(gòu)
Web服務(wù)訪問(wèn)控制的實(shí)現(xiàn)使用Raccoon來(lái)管理和執(zhí)行VPL策略,即通過(guò)獲取SOAP消息,讓Raccoon做出訪問(wèn)控制的決策,依賴(lài)于Raccoon的決策,來(lái)拒絕或者發(fā)送SOAP消息。因?yàn)橄⒃诜?wù)器端加密,客戶(hù)證書(shū)在服務(wù)器端傳輸,因此把HTTP作為傳輸協(xié)議。
2.2.1 Web服務(wù)部署
此結(jié)構(gòu)中,把Web服務(wù)部署在Apache Tomcat服務(wù)器上,同時(shí)使用Axis引擎。Axis本質(zhì)上是一個(gè)SOAP引擎,提供創(chuàng)建服務(wù)器端、客戶(hù)端和網(wǎng)關(guān)SOAP操作的基本框架[3]。使用 Axis是為了利用 Axis handler概念。handler是SOAP消息的特殊部分,例如,handler可以控制消息發(fā)送方在允許消息被服務(wù)器處理之前對(duì)其執(zhí)行身份驗(yàn)證。
2.2.2策略部署
Web服務(wù)的VPL策略部署在策略服務(wù)器中。由于Raccoon是基于CORBA的,所以部署VPL策略需要CORBA接口庫(kù)。接口使用IDL語(yǔ)言描述,IDL語(yǔ)言由WSDL演變而來(lái)。這種演變可以由XSL樣式表轉(zhuǎn)換,例如,WSDL中 portTypes對(duì)應(yīng)了 IDL的 interfaces,operations對(duì)應(yīng)了 IDL的operations,WSDL操作中<input>元素對(duì)應(yīng)了 IDL中的參數(shù) in,<o(jì)utput>對(duì)應(yīng)了 IDL中的參數(shù) out。
2.2.3用于訪問(wèn)決策的Axis handler
Axis handler充當(dāng)CORBA客戶(hù)端與角色以及策略服務(wù)器通信的中介。當(dāng) SOAP消息通過(guò) handler,handler從SOAP消息中獲取用戶(hù)信息(如證書(shū))以及請(qǐng)求的方法名以及參數(shù)。這些證書(shū)用于從Raccoon角色服務(wù)器中獲取用戶(hù)的角色證書(shū)。角色服務(wù)器中存放了用戶(hù)證書(shū)和角色之間的關(guān)系。策略服務(wù)器包含了視圖以及視圖和角色之間的關(guān)聯(lián)。基于客戶(hù)角色,handler決定是否允許訪問(wèn)Web服務(wù)操作。如果訪問(wèn)被拒絕,將拋出異常;否則,SOAP消息被發(fā)送給Web服務(wù)。
本文使用VPL來(lái)描述Web服務(wù)的訪問(wèn)控制需求。VPL以及相應(yīng)的訪問(wèn)控制模型來(lái)源于基于CORBA的應(yīng)用。通過(guò)擴(kuò)展VPL來(lái)覆蓋所有的Web服務(wù)需求。提出了一種用于實(shí)現(xiàn)基于Web應(yīng)用的訪問(wèn)控制策略的結(jié)構(gòu),同時(shí)也為Web服務(wù)安全管理提供部署和管理工具。
VPL可以用于描述XACML規(guī)范,可以通過(guò)樣式表將VPL轉(zhuǎn)換成XACML。后期工作主要集中于將Raccoon結(jié)構(gòu)轉(zhuǎn)化為XACML模型,為其他系統(tǒng)提供互操作性,例如 jiffyXACML或者 sun’sXACML。
[1]張賽男.軟件系統(tǒng)UML建模與其安全建模的集成[J].計(jì)算機(jī)工程,2007,33(8),86-88.
[2]BROSE G.Raccoon-an infrastructure for managing access control in CORBA[C].Proceeding Conference on Distributed Applications and Interoperable Systems (DAIS), Paris,F(xiàn)rance,2004.
[3]PAPAZOGLOU M P.Web服務(wù):原理與技術(shù)[M].龔玲,張?jiān)茲g.北京:機(jī)械工業(yè)出版社,2010.