摘 要: 提出了一种用于Web服务的访问控制模型,这种模型和Web服务相结合,能够实现Web服务下安全访问控制权限的动态改变,改善目前静态访问控制问题。新的模型提供的视图策略语言VPL用于描述Web服务的访问控制策略。给出了新的安全模型和Web服务集成的结构,用于执行Web服务访问控制策略。
关键词: Web服务;访问控制;视图策略语言;访问控制策略
随着Web服务的广泛应用,Web服务中的访问控制策略描述及实现显得尤为重要。目前,Web服务安全标准以及其实现并不完善,Web服务安全多数交由作为应用程序服务器的Web服务器的安全机制管理。例如,Tomcat服务器为用户、组、角色的管理和为访问Java-Web应用程序的权限提供了安全管理。但是,Tomcat中的授权是粗粒度的,也就是说,Tomcat不可能限制对Web服务的单个的访问操作。
本文通过示例,探讨如何把一种新的安全模型应用到Web服务中。这种新的安全模型提供了一种规范语言——视图策略语言,其授权可以在Web服务单个的操作层次上细粒度地指定,同时授权还可以通过操作的调用动态地改变。这种模型和Web服务相结合,能够实现Web服务下安全访问控制权限的动态改变,改善目前静态访问控制的问题。
1 Web服务访问控制规范
1.1 图书中心系统
图书中心系统是一个Web服务的简单应用,其结构如图1所示。
图书中心系统主要提供书店注册服务、书店客户注册服务、书店处理客户注册请求服务、书店管理客户借阅图书信息服务和为所有的用户查询图书信息的服务。其中书店注册是其他所有服务的前提条件。
1.2 系统中的访问控制需求
图书中心系统的访问控制需求描述如下:
BusinessRegistration:书店经理注册自己的书店。这个注册是其他所有服务的前提条件。
CustomerRegistration:书店的客户向书店提交注册申请。
CustomerRegistrationProcess:书店处理客户的注册申请。
CustomerBookList:书店仅能为自己的客户使用此服务。客户可以查询己借阅清单,但不能在此清单上添加新的请求,只有店员可以添加客户的借阅清单。
BookSearch:店员和客户都能使用此服务查询图书信息。
1.3 系统中的访问控制
基于视图的访问控制VBAC(View-Based Access Control)模型是专门用于支持分布式访问控制策略的设计和管理的模型[1],图2是VBAC的简易模型。VBAC模型可以看成是基于角色的访问控制RBAC(Role-Based Access Control)模型的扩展,VBAC增加了视图以及模式的概念。视图描述的是对访问对象的授权,视图被分配给角色。如果一个主体所扮演的角色拥有对某个对象访问的视图,则这个主体就可以访问此对象。如果这个角色没有这个视图,则这个主体就不能访问此对象。模式描述的是视图和角色动态的分配以及删除。
视图策略语言VPL(View Policy Language)是一种说明性的语言,用于描述VBAC策略。VPL用于描述角色、视图以及模式。角色在角色声明roles之后,视图以及模式声明使用关键字view和schema。
角色声明描述了策略中的角色以及这些角色初始拥有的视图。图3是图书中心的角色声明。这个例子中有customer和staff两个角色。staff继承了customer,customer能够调用的操作,staff也可以调用。staff拥有初始视图BusinessRegistratoin,关键字holds来说明角色拥有视图,而customer没有初始视图。
图4是图书中心的访问控制需求的VPL视图声明,关键字controls引导的是一个类或者接口。例如,视图BusinessRegistration允许调用类BusinessRegistration的操作processRegisterRequest。VPL视图可以静态地被限制给特定的角色,这些角色罗列在关键字restricted to后面。例如,视图BusinessRegistration只能被赋给角色staff而不能赋给customer。
VPL对被描述的授权操作的参数没有限制,即不需要全部参数才能调用某个操作。例如,调用操作getCustomerGUID仅需要书店的loginBusinessID就能获取到自己书店的所有客户的信息。因为,书店在注册以后有对应的loginBusinessID。由于基于CORBA的应用程序,都会采取为每个客户端在服务器端创建一个对象的设计模式。因此,客户端与创建的对象进行通信无需身份验证。例如,在这个例子中,每个客户端在服务器端都有一个CustomerRegistrationProcess对象,由于SOAP对面向对象支持的局限性,将loginBusinessID作为一个参数给出。
因此,研究扩展VPL来说明操作被调用的时候所必须具备的条件是在操作后添加if caller=param来指定必备条件。这个表达式中,关键字caller表示此操作调用者的ID,param表示操作的实参。调用者由一个整数表示其身份。如果操作的某个参数不是必须的,用”-”表示;如果视图中操作参数没有任何条件限制,则VPL视图中仅有操作名称的标识符,而没有参数列表。例如,视图BusinessRegistration中的操作processRegisterProcess就属于这一类型。
依据服务CustomerBookList,角色staff和customer有不同的访问需求。staff可以调用processAddRequest以及processQueryRequest两个操作,但是customer仅能调用processQueryRequest。视图CustomerBookListFull确定其使用角色是staff,可以拥有两个操作,而CustomerBookListRestricted没有角色的限制。如果视图被调用,customer仅能查询自己借阅的书。
VPL模式(VPL Schema)为动态访问控制建立模型。它描述给定的操作被调用后带来角色授权的改变,而角色不能拥有某个视图,用assign视图from角色表示;反之,用assign视图to角色表示。图5表示调用完操作processRegisterRequest后,将CustomerRegistrationProcess等视图授权给角色staff,而将CustomerBookListRestricted等视图授权给角色customer,即表示了访问控制权限动态地改变。
2 访问控制策略的执行
这部分描述在Web服务下执行VPL表示的访问控制策略的基础结构。这个结构中包含了执行VPL所描述策略的Raccoon[2]结构。
2.1 Raccoon结构
Raccoon结构包含了处理VPL策略的开发工具以及定义角色视图的存储库(即角色、视图服务器)。视图角色服务器可以使用图形管理工具来处理,访问控制决策依据这些存储库来决定。
图6为Raccoon结构的主要部分。角色服务器包含了用户所有的角色证书,当一个客户在系统中认证时,客户得到所有属于自己的角色证书;而当客户端调用服务器端的某个操作时,相应的角色证书被传送。此调用由拦截器拦截,拦截器传送客户端信息给访问决策对象。如果客户端被准许调用此操作,访问决策对象依据给出的角色以及策略来决策。请求策略分布在服务器上,如果策略允许客户调用操作,那么拦截器给服务器发送一个请求;如果不允许,则此访问被拒绝。
2.2 Web服务访问控制的实现
Web服务访问控制的实现使用Raccoon来管理和执行VPL策略,即通过获取SOAP消息,让Raccoon做出访问控制的决策,依赖于Raccoon的决策,来拒绝或者发送SOAP消息。因为消息在服务器端加密,客户证书在服务器端传输,因此把HTTP作为传输协议。
2.2.1 Web服务部署
此结构中,把Web服务部署在Apache Tomcat服务器上,同时使用Axis引擎。Axis本质上是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架[3]。使用Axis是为了利用Axis handler概念。handler是SOAP消息的特殊部分,例如,handler可以控制消息发送方在允许消息被服务器处理之前对其执行身份验证。
2.2.2 策略部署
Web服务的VPL策略部署在策略服务器中。由于Raccoon是基于CORBA的,所以部署VPL策略需要CORBA接口库。接口使用IDL语言描述,IDL语言由WSDL演变而来。这种演变可以由XSL样式表转换,例如,WSDL中portTypes对应了IDL的interfaces,operations对应了IDL的operations,WSDL操作中<input>元素对应了IDL中的参数in,<output>对应了IDL中的参数out。
2.2.3 用于访问决策的Axis handler
Axis handler充当CORBA客户端与角色以及策略服务器通信的中介。当SOAP消息通过handler,handler从SOAP消息中获取用户信息(如证书)以及请求的方法名以及参数。这些证书用于从Raccoon角色服务器中获取用户的角色证书。角色服务器中存放了用户证书和角色之间的关系。策略服务器包含了视图以及视图和角色之间的关联。基于客户角色,handler决定是否允许访问Web服务操作。如果访问被拒绝,将抛出异常;否则,SOAP消息被发送给Web服务。
本文使用VPL来描述Web服务的访问控制需求。VPL以及相应的访问控制模型来源于基于CORBA的应用。通过扩展VPL来覆盖所有的Web服务需求。提出了一种用于实现基于Web应用的访问控制策略的结构,同时也为Web服务安全管理提供部署和管理工具。
VPL可以用于描述XACML规范,可以通过样式表将VPL转换成XACML。后期工作主要集中于将Raccoon结构转化为XACML模型,为其他系统提供互操作性,例如jiffyXACML或者sun’sXACML。
参考文献
[1] 张赛男.软件系统UML建模与其安全建模的集成[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, France, 2004.
[3] PAPAZOGLOU M P.Web服务:原理与技术[M].龚玲,张云涛,译.北京:机械工业出版社,2010.