在AO4BPEL框架下,每个BPEL流程的activity都可以作为一个潜在的连接点,一组相关的连接点被一个切入点所标识。一个advice是表述特定非功能需求的BPEL activity。在AO4BPEL中,切入点对连接点的捕获通过XPath[13]技术实现。切入点是一个XPath表达式,XPath支持逻辑操作,因此它可以表达join point的组合。与AOP编程语言Aspectj类似,AO4BPEL也定义了before, after和 around三种advice执行方式。在此基础上,Anis进一步提出了基于AO4PBEL的安全服务组合实现框架,它包括安全服务(security service), 过程容器(process container)和部署描述器(deployment descriptor)三个主要部件。安全服务器(security service)是一个web服务中间件,它确保BPEL流程和各参与方以及客户端间的安全交互,提供包括认证、数据完整性、不可抵赖性等安全功能实现以供Web服务编排(orchestration)引擎调用;过程容器(process container)实现了一组aspects, 它通过部署描述器中对特定安全功能需求的描述自动生成。过程容器中的安全aspect在BPEL流程执行过程中被动态植入。部署描述器(deployment descriptor)是基于XML的,它指定BPEL流程中与特定活动相关联的安全需求,它对服务组合安全需求的描述区分与消息活动相关的消息级(messaging-level)安全需求(如对某个activity的调用时,必须通过消息加密传输)与过程级(process-level)的安全需求(如嵌套了两个invoke的sequence执行,必须满足事务要求)。在基于AO4PBEL的安全服务组合实现中,结合WS-Policy[14]、WS-Security规范来表述服务组合参与方的安全能力、安全需求等。为实现组合过程中的安全需求,过程容器通过截获过程执行,调用特定的中间件服务(Middle Web Service)来实现服务组合安全需求。中间件服务基于WSS4J[15]实现,它在BPEL流程执行过程中被植入,实现对可靠消息和安全性等非功能需求的支持。
下面以银行转帐场景为例,来说明在部署描述器中如何实现对服务组合安全性的声明。客户访问其银行的在线网站,通过填入必要的信息实现银行转帐。他需要指定目的帐户及其所在银行的编码以及转帐的数额,当用户确认后,一个要求被提交并在银行的Web服务中等待执行,它将要调用银行后端服务的转帐操作。这个操作是以BPEL流程形式实现,其中包括了对“credit”、“debit”等服务的调用。这样的一个组合流程,需要基于消息级(如需要对debit操作进行加密)和基于过程级的(如credit、debit操作必须满足事务要求)的安全保证。这样的安全需求,在部署描述器中声明如下内容所示[12]。
<bpel−dd>
<selectors>
<selector id=”0” name=”credit” type=” activity ”>
// invoke[@operation=”credit”]</ selector>
<selector id=”1” name=”debit” type=” activity ”>
// invoke[@operation=”debit”]</ selector>
<selector id=”2” name=”debitcredit” type=”compoundActivity”>
// sequence[@name=”debit credit”]</ selector>
</ selectors>
<services>
<service name=”security”>
<requirements>
<requirement name=”req2” class=” confidentiality ”
type=”decryption” selectorid =”1”/>
<requirement name=”req1” class=” confidentiality ”
type=”encryption” selectorid =”1”>
<parameters>
<parameter name=”symmetricEncAlgorithm”>
xmlenc# tripledes−cbc</parameter>
<parameter name=”keyEnc”>
http :// www.w3.org/2001/04/xmlenc#rsa−1 5</parameter>
(责任编辑:adminadmin2008)