??xml version="1.0" encoding="utf-8" standalone="yes"?> 本文介绍了如何对WebSphere IICE SOAP消息机制q行改进Q以提供消息完整性和保密性。这U机制包括用XML 数字{Ҏ(gu)息进行签名来辑ֈ消息完整性,和用XML加密Ҏ(gu)息进行加?解密来达到消息的保密性。本文还解释了如何把WebSphere IICE现有的安全机制整合到Web Services安全实现中来。同Ӟ本文也是实现Web Services安全机制的一ơ非常好的实c(din)它不仅能便L(fng)实现安全模型、安全算法的随意扩展而且本文的实现原理能方便的移植到IBM所有需要实现Web Services安全的品中?/p> 1. 背景介绍和动?/strong> WebSphere IICE作ؓ(f)企业信息集成的领D,其基于J2EE框架的结构通过扩展SOAP消息接口实现了对Web Services的支持。它主要提供了三USOAP服务Qƈ把它们命名ؓ(f)WebSphere IICE Web Services。这些服?Web Services 接口、SOAP 客户端代理和SOAP CONNECTOR代理-使得WEBSPHERE IICE能容易的部v在因特网中,q能被因特网中的其他服务讉K。正是WebSphere IICE的这些特性不仅得其各个分布式部件能异步的交互,而且q能使得WebSphere IICE各个分布式部件能无状态的交互Q从而省略了?x)话状态管理,同时可以不必考虑实现服务的协议和服务的位|?/p> 不幸的是Q这U结构松散、协议开攄环境很容易被潜在的安全威胁所d。一个Web Services消息在到辄的地之前要在很多个中间介质中传递,q样拥有一个成熟的消息层面的安全机制就变得格外重要?/p> 现在的WebSphere IICE提供的解决SOAP消息在现实电(sh)子商务网l环境中传输安全问题的技术方案还存在一些不I譬如安全法单,加密l构灉|性有限等?/p> SOAP规范使得M安全机制(数字{、信息完整性保护、加?解密{?能方便的应用CQ何的ZWeb Services的应用程序中?/p> IBM已经提供了一个完整的技术策?WS-Security。这h个行业就能各自实现此Z标准的结构来满现实商业中复杂的、灵zȝWeb Services安全需求。通过提升Web Service核心模块的可扩展性,我们可以获得Z诸如SOAP、WSDL、XML数字{、XML加密/解密和SSL/TLS{核心技术的解决Ҏ(gu)。这样得Web Services的提供者和需求者能Ҏ(gu)各自的应用程序安全需求来开发解x案。这些解x案和标准使得我们能够方便的把Web Services安全解决Ҏ(gu)和W(xu)ebSphere IICE Web Services部g整合在一赗?/p> 2. 实现原理 2.1 WebSphere IICE Web Servives概述 现在WebSphere IICE提供两个层次的Web Services部gQ一个是SOAP客户端代理、SOAP connector代理和W(xu)eb Services APIQ我们把q部分叫做WebSphere IICE Web Services客户?另外一部分是作为WebSphere IICE Web模块发布的服务器端SOAP实现。此Web模块把IICE接口作ؓ(f)Web Services发布出去q把q些接口和其他模块整合在一赗从技术角度来ԌW(xu)ebSphere IICE Web Services部g利用了Apache Axis工具包。我们可以简单的把WebSphere IICE的两部分理解为Axis客户端和Axis服务器端。下面讲qCWebSphere IICE Web Services部g的细节?/p> SOAP客户代理?如图1部g1)应用SOAP作ؓ(f)WebSphere IICE标准API和ACCESSSERVICES部g交互协议?/p> SOAP connector代理?如图1部g2)应用SOAP作ؓ(f)ACCESSSERVICE EJBlg和已l部|的CONNECTOR EJB部g的交互协议。此实现机制和SOAP客户代理层的实现机制非常相象?/p> Web Services调用接口(如图1部g3)通过SOAP接口提供了WebSphere IICE整合接口的绝大部分内宏V它包括一个WSDL文gQ此文g定义了调用接口ƈ且提供了一U语a无关的方式来讉K Internet 中非l构化的数据?br />2.2 WebSphere IICE密文d原理 WebSphere IICE加密机制是对BLOWFISH法的一U实现。一旦安装成功,W(xu)ebSphere IICE?x)用此法产生一个密钥文件同时要保证此文件在客户端和CONNECTOR端的CLASSPATH中。如下是应用BLOWFISHq行?解密的一个过E示例?/p> 列表1:应用blowfishq行加、解密过E?/p> 客户端的加密q程Q?/font> //Create and encrypt an AuthBundle. 服务器端的解密过E:(x) 2.3 WebSphere IICE Web Services SOAP消息安全概述 ׃WebSphere IICE使用Axis作ؓ(f)SOAP引擎Q我们首先需要了解一下Axis的机制。可以说QAxis的Q务就是处理消息。当Axis的核心处理逻辑启动Ӟ一pd的句柄会(x)被顺序的调用。调用的序是由两个因素来决定的--部v文g和此引擎为客L(fng)q是服务器端?/p> WebSphere IICE Web Services?x)被一pd的客L(fng)和服务器端Axis/JAX-RPC句柄处理。ؓ(f)了能使此安全解决Ҏ(gu)正常工作Q这些句柄必被安装q且要保证安装顺序正。本文提供了两套句柄分别实现消息的加?解密和消息完整性验证功能,同时要保证这四个句柄被正的安装在客L(fng)和服务器端的WSDD配置文g中,q样才能保证对于每一个从客户端发出的消息都被客户端的证书加密和签名,同时才能保证服务器端接受到的每一个消息都是被验证的而且每一个消息都l过了解密。这h们就实现了SOAP消息的完整性和机密性?/p> 同时Q用户可以选择是否使用此安全机制。如果用户們于非安全机制Q他所需要做的就是注释客L(fng)和服务器端的WSDD配置文g?/p> 2.4 WEBSPHERE IICE WEB SERVICE SOAP消息安全实现l节 A. 配置 WebSphere IICE Web Services安全机制的配|工作是由客L(fng)和服务器端两部分l成的。就如下面的配置文g实例说描q的一PSOAP消息?x)在它被发送到目标服务器之前分别被不同的句柄签名和加密。相对应的,它也?x)在服务器端被验证和解密?/p> 列表2:AXIS客户端配|文件示?/p> 服务器端的配|文件和客户端的配置文g非常相像?/p> B. {和加?解密q程: SOAP消息的签名和加密/解密q程如图2所C? 列表3: XML{CZ代码 列表3昄了XML{的过E?首先得到SOAP信封Q接下来是获得用戯书信息、生签名对象,然后是用此签名对象对信封q行{Q最后是从被{的信中产生新的SOAP消息?/p> 列表4:XML加密CZ代码
]]>
]]>
]]>
?:WebSphere IICE Web Services部g
AuthBundle aB = new AuthBundle(user, password);
try {
//Encrypt the auth bundle
(new BlowfishSealer()).seal(aB);
} catch(KeyNotFoundException knfe) {
...
}
...use the sealed bundle to logon to a chosen repository.
..
// Unseal the auth bundle if sealed.
if(authBundle.isSealed()) {
// Instantiate an unsealer proxy.
UnsealerProxy uP = new UnsealerProxy();
try {
// Attempt to unseal the bundle.
// The UnsealerProxy will delegate unsealing
// to a new instance of "my.magic.Unsealer"
uP.unseal(authBundle);
} catch(UnsealerNotFoundException unfe) {
throw new LogonException("Unable ?unsealer.", unfe);
} catch(KeyNotFoundException knfe) {
throw new LogonException("Unable ?", knfe);
} catch(InvalidKeyClassException ikce) {
throw new LogonException("Invalid decryption...", ikce);
} catch(EncryptionException ee) {
throw new LogonException("An error ?", ee);
}
}
...<globalConfiguration>
<requestFlow>
<handler
type="java:com.venetica.vbr.webservices.handler.X509SignHandler"/>
<handler
type="java:com.venetica.vbr.webservices.handler.EncryptHandler"/>
</requestFlow>
<responseFlow>
<handler
type="java:com.venetica.vbr.webservices.handler.X509SignHandler"/>
<handler
type="java:com.venetica.vbr.webservices.handler.DecryptHandler"/>
</responseFlow>
</globalConfiguration>
?:SOAP消息的签名和加密/解密q程public Message signSOAPEnvelope(SOAPEnvelope unsignedEnvelope) throws Exception
{ // WSSignEnvelope signs a SOAP envelope according to the
// WS Specification (X509 profile) and adds the signature data
// to the envelope.
WSSignEnvelope signer = new WSSignEnvelope();
String alias = "username";
String password = "password";
signer.setUserInfo(alias, password);
Document doc = unsignedEnvelope.getAsDocument();
Document signedDoc = signer.build(doc, crypto);
// Convert the signed document into a SOAP message.
Message signedSOAPMsg = (org.apache.axis.Message)AxisUtil.toSOAPMessage(signedDoc);
return signedSOAPMsg;
}
列表4昄了加密过E?首先获得加密前的SOAP信封Q接下来获得用户的证书信息ƈ以此产生加密对象Q然后是应用此加密对象对获得的SOAP信封q行加密Q最后ؓ(f)Ҏ(gu)被加密之后的SOAP消息产生新的SOAP消息q向下传递?p> C. 消息Ҏ(gu):public Message encryptSOAPEnvelope(
SOAPEnvelope unsignedEnvelope, Message axisMessage)
throws Exception
{
WSEncryptBody encrypt = new WSEncryptBody();
// build the encrypted SOAP part
Document doc = unsignedEnvelope.getAsDocument();
Document encryptedDoc = encrypt.build(doc, crypto);
// Convert the document into a SOAP message
Message encryptedMsg =
(Message)AxisUtil.toSOAPMessage(encryptedDoc);
// Retrieve the desired SOAP part
String soapPart = encryptedMsg.getSOAPPartAsString();
((SOAPPart)axisMessage.getSOAPPart()). setCurrentMessage(soapPart, SOAPPart.FORM_STRING);
encryptedDoc =axisMessage.getSOAPEnvelope().getAsDocument();
// Convert the document into a SOAP message
Message encryptedSOAPMsg = Message)AxisUtil.toSOAPMessage(encryptedDoc);
return encryptedSOAPMsg;
}
?和图4分别昄了签名消息和加密消息的对比情c(din)?/p>
?:应用数字{前后SOAP消息Ҏ(gu)
3. 益处
4. l论
本实践对WebSphere IICE的Web Services SOAP消息安全机制q行了改良。同时提供了一个把最新技术标准应用于IBM产品的示例。这样不仅满了用户新的需求而且很好的扩展了IBM产品的应用场景?/p>
与其它Web服务说明书一PW(xu)S-Reliability体现出可l合性的特点Q它允许你按照需求合匹配各USOAP行ؓ(f)。通过q种方式QQ何基于SOAP的应用都可以获得该可靠性层的好处,只需单地dSOAP头信息就能用WS-Reliability中的M规则。例?
管WS-ReliabilityZSOAP提供协议以某U方式传送有效负载等可靠数据Q但q是要通过一个高层栈的翻译或处理来决定是否执行一个可靠通信。在WS-Reliability's中,高层栈是指能够进行{化的一U特D环境,它可以是ESB或折like PHP/PEAR?Java/Axis{Web服务框架?/p>
q说明,q用WS-Reliability实现的服务能够无~地与其它服务交互,但唯一使用q些信息Q还必须学习(fn)一个特D的Web服务栈。有个例子,Apache Software Foundation创徏的名为Sandesha 的WS-Reliability实现被加入了Axis框架中。而Axis框架是该基金?x)创建的一个Java Web服务栈?/p>
现在Q我们来看看Sandesha如何利用Axis框架创徏可靠的Web服务。我们ƈ不深入到l节Q你可以查阅Sandesha的文档来看看它是如何加入到Axis架构中的。或者好好阅读Axis文档Q如何你对它不熟(zhn)的话?/p>
我们的情景是一个Web服务客户端向一个股报L(fng)l发Z个可靠请求。表?.1昄了我们的客户端如何用Sandesha/Axis?/p>
Listing 1.1
import org.apache.axis.client.Service; import org.apache.sandesha.Constants; import javax.xml.namespace.QName; public class StockQuoteClient { private static String targetURL = "http://acmestockquote.com/axis/services/StockQuote"; public static Double stockQuote(String symbol) { |
StockQuoteҎ(gu)包括我们的业务逻辑。首先,使用了Service和Callc,每个对象实例可以被基于Java Axis的Web服务客户端正怋用。在上面的例子中Q它们都被保证可靠性的层SandeshaContext使用?/p>
SandeshaContext用来l护在客L(fng)和服务器端之间交互的状态。这是Z么CallҎ(gu)在ctx.initCall和ctx.endSequence之间被嵌套的原因。而它们正代表了Sandesha启动和结束一个可靠的q程。实际上QCallҎ(gu)产生了一个不能被标准Web服务操作探测到的错误Q例如被保的传送或者重复的h。Sandesha能够通过它的上下文来军_如何输出?/p>
在表单中Q你q能看到在ctx.initCallҎ(gu)中有urn:wsrm:stockQuotePrice的命名空间。它代表了被加入到客L(fng)h中的额外SOAP头信息,它能被Web服务提供者识别用来完成可靠性过E。在Axis/Sandesha的例子中Q尽二者的l合提供了对构徏h译WS-Reliability客户端能力的服务提供者的支持Q但它还h本文没有提到的其它功能。不q,你应该注意到Axis/Sandesha框架已经与WS-Reliabilityq行了成功的试Q包括不同的Web服务栈上的客L(fng)与服务器端,包括IBM、Microsoft 和Systinet?/p>
xQ我们对Sandesha和W(xu)S-Reliability下一个结论。在解释了如何利用Web服务的可靠性特征后Q你现在可以考虑实现其它的企业消息技术,例如至今可靠的分布式通信产品JMS (Java Messaging Service)Qƈ且用WS-Reliability提供同样的可靠性,但要l承q_无关的Web服务的所有优炏V?/p>
因此Q许多组l正避免?Web 服务来处理复杂的业务交互(在复杂业务交互中Q服务用者可能同时与同一服务q行多个交互Q或同时与多个服务进行多个交??OASIS(l构化信息标准促q组l?此cM互称?Web 服务?x)话Qƈ支持会(x)话的 Web 服务UC?x)话?Web 服务??x)话?Web 服务是异?Web 服务的基Q在实现持箋长时间业务事务方面v着臛_重要的作用?/font>
本文介l如何用显式状态标识符支持?x)话?Web 服务?此外Q还概q如何?Oracle JDeveloper 10g 10.1.3 J2EE 开发h员预览版(?J2EE 1.4 JAX-RPC 提供了内|的支持)实现该种Ҏ(gu)?/font>
?x)话?Web 服务?/strong>
服务使用者与服务提供者之间的大多C互是 Web 服务?x)话Q例如,某个服务端点可能同时从多个客L(fng)收到多种cd的文档,处理q些文档q用相应的响应联系使用者?在这L(fng)应用E序中,特别要求正确识别每个客户端的交互Q这使得 Web 服务实现更加复杂?Z避免q种复杂性,许多公司?Web 服务实现局限于单的单一h/响应cd的交?AuthorizeUser、CalculateTax、ConvertFunds {??/font>
但就其理x形而言QW(xu)eb 服务应支持服务用者和支持提供者之间的单一交互和复杂交互?无论传输协议如何Q同步或异步 Web 服务都应能够代表单个客户端或在跨多个交互的特D业务环境中保存状态或资源?/font>
长期以来Q解?Web 服务中的状态性问题的需要一直是标准l织和主要供应商的焦炏V?军_键Q务和冗长业务程中的状态性问题,涌现了多?Web 服务规范草案Q如 WS-Addressing、WS-Resources ?WS-Coordination?最重要的是Q业务流E执行语a (BPEL) 1.0 规范已经整合?WS-* 标准的许多特性来处理持箋旉较长的业务事务?但也应看到新标准和解?Web 服务?x)话问题的相关供应商技术的q泛采用?/font>
MQ实C(x)话式 Web 服务仍是一个相当大的设计挑战?当面临依?Web 服务的复杂应用程序时Q应用程序开发h员别无选择Q只能构建定制的解决Ҏ(gu)?/font>
?x)话?Web 服务的工作方?/strong>
?x)话?Web 服务(本质上是异步?有两个重要的服务元素cd: 可调用方法和响应Ҏ(gu)(通常UC回调)??x)话?Web 服务中的每个可调用方法和回调Ҏ(gu)定该服务、其客户端以?qing)该服务所使用的Q何执行控?例如QJava 控g)之间的通信行ؓ(f)?可调用方法可以启动、l或l束?x)?而回调可以l或停止?x)话?/font>
为更好地描述?x)话?Web 服务Q我介l一个场景,在本文通篇以该场景ؓ(f)基础?该示例采用两个会(x)? 一个是 Web 服务与它的客L(fng)之间的会(x)话,另一个是两个 Web 服务之间的会(x)?参见?1)?/font>
在本CZ中,BestTermInsurance Web 服务通过使用另一个服?(InsuranceQuote) 代表客户查找各种保险提供??当客L(fng)h BestTermInsurance 服务提供报h(hun)Ӟ启动第一个会(x)??BestTermInsurance 服务调用 InsuranceQuote 服务h报h(hun)Ӟ启动第二个?x)话??InsuranceQuote 服务扑ֈ最低报hQ它?yu)响?BestTermInsurance 服务Q第二个?x)话随即完成?然后QBestTermInsurance 服务恢复与客L(fng)的第一个会(x)话?br />
?1: BestTermInsurance 服务
Web 服务?x)话保?Web 服务的状?后者包括用于链?Web 服务、它的客L(fng)和其他资源之间的通信的相x据以?qing)在会(x)话完成之前p服务保存的Q何数据?该状态信息称作会(x)话状?也称作关联状??在本CZ中,BestTermInsurance 服务保存客户端的每个报h(hun)以及(qing)兌的消息属性,直到扑ֈ最低报仗?br />
理?x)话状?/strong>
使用昑ּ状态标识符是在 Web 服务交互中管理会(x)话状态的最单和最相当有效的方法?管名称暗示了单?IDQ但完全受管理的?x)话需要更多的信息Q尤其是当与服务h兌时?因此Q状态标识符实际上是一个控制类Q它保存以下一l针Ҏ(gu)个请?响应交互的与状态相关的信息:
Z本文的需要,我采用静?Web 服务调用Q因此将不介l第 5 U信息?/p>
一般说来,用于兌h的技术解x案是让服务请求者将状态标识符信息(服务h的唯一标识W?h ID)、会(x)话标识符(?x)?ID)和会(x)话阶D|C器(阶段)d到请求消息中Qƈ让服务提供者将标识W信息复制到通过回调传递的响应消息中,q样h者可以将回复消息与请求消息相兌?/p>
有多U方法可以将状态标识符信息包含在消息交换中Q具体包?
但无论是通过d额外的输入参数将标识W信息包含在服务接口中的W一U方法,q是此cM息包含在 XML 文档本n中的W二U方法,事实上都?x)标识W信息处理成为服务结构一部分Q从而代码更难以维护?此外Q将来随着?Web 服务标准被更q泛地接受,可能不再需要自定义解决Ҏ(gu)了,从而将难以从服务实C“拆除”嵌入的、与标识W相关的逻辑?/p>
因此Q第三种Ҏ(gu)Q即标识符信息包含?SOAP 消息标头中是最合理的方法?使用此方法时Q服务请求者将标识W信息作Zl新的子元素d到消息的 SOAP 标头中?服务提供者拦截该 SOAP 消息Q然后提取标头中相应的状态标识符信息且不?x)破坏消息主体?/p>
单地_(d)标识符信息d?SOAP 标头中将使相关的代码与文档处理逻辑和关联的业务逻辑以及(qing)服务接口的具体实现相分离?/p>
实现昑ּ的状态标识符 - CZ
现在Q我们将l箋介绍CZ场景 - BestTermInsurance 服务?(请参见图 2 以获得该场景的说明? 正如Ҏ(gu)中描q的QOracle 应用服务器提供了两个服务实现选项: 无状?Java c?可以部v?Web 容器?或无状态会(x)?EJB?(该设计基于将 EJB 与一个服?fa ade ?BestTermInsuranceServlet 一起??(zhn)?fa?ade 服务实Cؓ(f) EJBQ这是因样做不但h更好的服务可用性和可~性,q可以引?SOAP JAX-RPC 处理E序(E后对其进行详l介l??br />
?2: CZ场景
下面我们逐步介绍此示例场景ƈ了解该控件?当客L(fng)通过调用 servlet ?requestQuote Ҏ(gu)(传递有兛_户年龄和健康状况的信?提交搜烦hӞW(xu)eb 服务交互启动?requestQuote() Ҏ(gu)包含一?void q回|q立卌回,从而客户端可以l操作,而不必等待稍后将通过 onBestQuote() 回调发送的实际l果?显而易见,应将客户端设计ؓ(f)从回调方法中接受消息?/p>
接下来,BestTermInsuranceServlet 调用 BestTermInsuranceEJB(用于保存客户q龄和健L(fng)冉|C器)和一个所获得的报价列?与客L(fng) ID 和请?ID 兌Q作Z状态相关的数据)?BestTermInsuranceEJB 随后调用 InsuranceQuote 服务?obtainQuote() Ҏ(gu)以从参与的保险h那里获得报h(hun)?(参见?3Q一个演C最重要的服务交互的序列图?
InsuranceQuote 服务在特定客L(fng)作用域内q行Q因此该服务需要访问客L(fng) ID。在?x)话跟踪斚wQInsuranceQuote 服务使用它自q?x)话和请?ID?/p>
在根据给定的客户q龄和健L(fng)冉|C器攉所有保险报hQInsuranceQuote 服务使用 onObtainQuoteComplete() 回调q回其结果?此回调完成第二个转换Qƈ清除?InsuranceQuote 服务保存的所有状态数据?但由 BestInsuranceQuoteServlet 控制的第一个会(x)话仍l箋执行: BestTermInsurance 服务可能从客L(fng)获取其他hQ例如,Ҏ(gu)Ҏ(gu)的保单条?一q、十q等)提供最x仗?l果以消息Ş式通过 onBestQuoteCallback() Ҏ(gu)发送给客户端?/p>
~码技?/strong>
现在Q我们来着重介l以下实现状态标识符的具体编码技巧?遗憾地是Q由于篇q有限,只在代码中介绍与本文主题相关的元素?/p>
正如前面所介绍的,假设状态标识符信息已传?SOAP 消息标头中?用于Z XML 的远E过E调用的 Java API (JAX-RPC) 非常适于处理 SOAP 消息标头 - 具体而言是通过使用 JAX-RPC 的某个最有意义的Ҏ(gu)? 消息处理E序?消息处理E序?Web 服务提供了附加的消息处理逻辑Q以作ؓ(f)对这些服务的业务逻辑实现的扩展?除了理w䆾验证、加密和解密、日志记录和审计{外Q处理程序还支持状态标识符的插入?为此Q可以创建多个处理程序来理每个具体问题??JAX-RPC 中,处理E序的这U用法称作处理程序链?/p>
处理E序链表CZl有序的处理E序?使用有序l可以应用E序开发h员能够定义处理程序调用策?- 调用序、目?“仅处理h”或“仅处理响应”或两者都处理){?处理E序铄l处理处理程序,直到引发 SOAP 错误或调用策略指C显式停止点?/p>
因此Q要使用 SOAP 标头内嵌的状态标识符实现 Web 服务Q徏议用三个步骤来进行开?
使用 Oracle JDeveloper 10g J2EE 开发h员预览版Ӟ可以使用应用E序D器下的类别“Business Tier”将已编译的 Java cL bean 公开?Web 服务?从该cd中,开发h员可以选择一个上下文菜单“Java Web services”?此菜单项包含两个选项“J2EE 1.4 (JAX-RPC) Web services”和“Oracle J2EE 1.3 Web services”?选择“J2EE 1.4 (JAX-RPC) Web services”?br /> 以下代码清单昄了一个符合要求的 SOAP 消息格式Q其中的标头包含 BestTermInsurance 服务的外?客户?服务)?x)话的状态标识符:
<SOAP-ENV:Envelope>
<SOAP-ENV:Header>
<ns:stateIdentifier xmlns:ns="http://xxxxx">
<ns:ClientID>Client ID</ns:ClientID>
<ns:ConversationID>Conversation ID</ns:ConversationID>
<ns:RequestID>Request ID</ns:Request ID>
<ns:Phase>Phase</ns:Phase>
</stateIdentifier
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns:insuranceParms xmlns:ns="http://yyyyyyy">
<ns:Age>Age</ns:Age>
<ns:Health>Health</ns:Health>
<ns:Term>Term</ns:Term>
</ns:insuranceParms
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
但在此进E的开_(d)?SOAP 消息定义不包含状态标识符信息Q如下所C:(x)
<SOAP-ENV:Envelope>
<SOAP-ENV:Header>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns:insuranceParms xmlns:ns="http://yyyyyyy">
<ns:Age>Age</ns:Age>
<ns:Health>Health</ns:Health>
<ns:Term>Term</ns:Term>
</ns:insuranceParms
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
q正?SOAP 处理E序的用途所? 对将状态限定符插入到标?SOAP 消息定义q行处理??JAX-RPC 服务中,处理E序由实?handleRequest() ?handleResponse() Ҏ(gu)(用于修改h和响应消?的处理程序类表示?可以处理程序类配置为在客户端或服务U别处理h和响应?处理E序使用 javax.xml.soap.SOAPMessage cL处理 SOAP 消息?SOAPMessage 对象包含一?SOAPPart 对象Q该对象包含实际?SOAP XML 文档和一个被分解?SOAP M和标头的 SOAPEnvelope 对象?/font>
以下代码清单演示了所描述的方?
package exp.oracle.jaxrrpc.headers;
.............
import javax.xml.rpc.*;
import javax.xml.soap.*;
public class BestTermInsuranceRequestHandler implements javax.xml.rpc.handler.Handler
{
...........................
/*
*The handleRequest method processes the request message.
*/
try {
SOAPMessageContext msg = (SOAPMessageContext) context;
SOAPEnvelope env = msg.getMessage().getSOAPPart().getEnvelope();
SOAPHeader hdr = env.getHeader();
exit=processRequestHeader(hdr);
}
catch (Exception ex) {
ex.printStackTrace();
}
return exit;
}
/*
* This version of the process header method inserts the state identifier information.
*/
private boolean processRequestHeader (SOAPHeader hdr) {
boolean exit = false;
SOAPFactory sFactory = SOAPFactory.newInstance();
try {
SOAPElement he1 = sFactory.createElement("stateIdentifier",PREFIX,URI);
SOAPElement che11 = sFactory.createElement("ClientID",PREFIX,URI);
che11.addTextNode("Cust1");
...............................
he1.addChildElement(che11);
he1.addChildElement(che12);
he1.addChildElement(che13);
// add the state identifier information to the SOAP header object
hdr.addChildElement(he1);
exit = true;
}
catch (Exception ex) {
ex.printStackTrace();
}
return exit;
}
开?SOAP 处理E序后,可以使用 WSA 在相应的 webservices.xml 文g中配|它们?然后Q可以l创建部|描q文件ƈ?Web 服务安装?OC4J 中?/p>
l论
显而易见,单个请?响应交互与无状态的 Web 服务l合使用是最单的实现Ҏ(gu)?但伴随简单性而来的是一个很大的~点: 无法实现用于处理复杂和长期运行的业务事务?Web 服务?/p>
本文介绍的状态管理方法所Z的策略以更出色的Ҏ(gu)寚w期运行的业务zdq行建模?具体而言Q在本方法中Q服务“注册”到良好控制的会(x)?特定的工作单元表示Z务活动进??此功能对于连接企业内部以?qing)跨企业的、支?Web 服务的应用程序很重要Qƈ包含一l支持对q接的应用程序之间的交互q行理和监控的Ҏ(gu)?br />
http://www.oracle.com/technology/global/cn/pub/articles/davydov_soa.html
2 q多以前当搜索刚刚流行的时候,?span lang="EN-US">Googel中敲q普元两个字Q出来的多半是和某种钢材相关的信息,今天出来?span lang="EN-US">58000多条信息中关于普元Y件的基本上在?span lang="EN-US">30都是。普元用?span lang="EN-US">2q多的时_(d)把普元和面向构g技术紧密地联系hQ普元也成ؓ(f)软g构g化的代名词,成ؓ(f)世界领先的构仉域专家企业?/span>
很多人可能还不清楚ؓ(f)什么我们公司的名称?span lang="EN-US">?/span>普元?/span>两个字。这个听h像庙宇名字一L(fng)?/span>普元?/span>是什么意思呢Q?/span>
?/span> ?span lang="EN-US">?/span>意指普遍的,?/span>?span lang="EN-US">?/span>代表基本元素Q所以合h的解释就?span lang="EN-US">?/span>普遍存在的基本元?span lang="EN-US">?/span>。就像物理世界存在基本粒子ؓ(f)代表的基本元素一P我们认ؓ(f)在Y件世界也存在基本元素Q这些普遍存在的基本元素的集合是有限的、是可数的,因此决定了我们可以用一l基本信息元素构建复杂而庞大的信息pȝQ就像物理世界复杂系l(如分子、蛋白质、器官、hQ都是由一l基本元素(?sh)子、中子和质子Q组成的一栗在此哲学思想的指g下,我们可以构{一个面向构件的新Y件体pR在q个新的体系中,复杂的Y件系l将最l可以分解成些简单的元素Q基构gQ?/span>
像物理学家几百q探索物理世界,L物理世界的本质一P普元在探索信息世界,L软g世界的本质。今天的软g形态就?span lang="EN-US">19世纪的物理学的分支热力学Q基本上属于现象学的。h们观察ƈȝ了温度、压力等概念Qƈ且找C一些规律。一直到Z分子q动的统计力学出来以后,Z才明白温度乃是分子运动强度的表现Q压力是强度和密度的集合表现{等。由于历史的原因Q今天Y件的分类?span lang="EN-US">CRMQ?span lang="EN-US">ERP{等都是从用L(fng)视角来进行的Q无论是开发商q是用户都还没有拥有一个构造分析的视角Q能够用分析的视角看待Y件体pd有在面向构g的时代才真正成ؓ(f)可能?/span>
q个Z有限构g集合的新软g体系必将取代旧的无序的基于代码的传统软g体系Q黄博士的书《Y件的涅磐》就是阐q这个思想?/span>
企图用构件的思想来攻克Y件世界的q不是普元的原创Qؓ(f)什么这L(fng)Z(x)留给了普元?Z么Y件大国美国没有去做?软g大鳄IBM没有做?我们l常?x)遇到这L(fng)提问。回{这个问题需要两个方面的视角Q一是技术的视角Q另一个是商业的、市场的视角?/span>
从技术的视角来看QY件构件思想虽然已经提出q四十年Q但是昂贉|术的壁垒和由此所带来的标准壁垒得这L(fng)思想无法在通用的领域商业上成ؓ(f)可能。就像理Z我们今天可以用核聚变技术把h变ؓ(f)?sh)能一P商业上利用v水来发电(sh)q是遥不可及(qing)的。即使是?span lang="EN-US">10多年以前Qh们对软g的功能企图不q是相对单的客户理、生产流E管理、内部审批等{内容,基本限于部门U别的用,数也可以在公司范围内用。一台大型主机动辄几十万上百万美元,交换Z非常昂贵QY件接口没有标准,市面行着35U电(sh)脑之间的通讯协议Q在10多年前的那个时代q些也就_了?/span>
随着互联|的出现Q我们迎来了?sh)子商务和一个数亿h参与的信息互动时代。基于部门的非标准的软gpȝ不能再满h们对信息pȝ的要求了Q同时技术h(hun)格的在不断的急剧下降Q互联网?sh)子商务的全民互动时代强制了标准的迅速徏立,TCP/IPl治了网l通讯协议QY件标准也在逐步形成。当2001q?span lang="EN-US">4月普元把J2EE技术,WebService技术,XML技术和构g技术作为未来的标准技术集成在一L(fng)时候,应该说我们是先驱者之一。那个时候由于应用性能问题Q这些技术在实践中还是非常}慎采用的Qƈ非主。因此,可以说互联网的普?qing)得Y件构件技术获得生命?/span>
从市场的视角来看Q美国的大老们C天还在ؓ(f)解决q去几十q所留下的大量的C万亿元计算的企业信息系l改造而操心,因ؓ(f)那是今天最大的一块饼Q美国h拖上印度Z起在努力的分割这一块传lY件市场的最后一块蛋p。他们无暇顾?qing)这个在国q需要多q时间才能够变得可观的市场。美国也曄pq企业在面向构g技术的路上C几年Q最后应为市场的原因而倒闭和拍卖,发达国家的主客L(fng)机房里都已经堆满了历史上遗留的各U信息系l,从商业的角度看今天谁也不愿意Z个新的Y件体pM单?/span>
因此Q这个机?x)留l了在中国的普元。今天中国的企业软g市场不过是世界市场冰׃角,仅占全球市场?span lang="EN-US">3%左右。中国企业的信息化程度也不过仅有5%Q未来的十年中国q有很长的\要走。不q我们有理由怿Q中国在未来?span lang="EN-US">5?span lang="EN-US">10q将成ؓ(f)全球信息化的L市场之一Q中国将Z息化付出C亿h民币的代仗然而,我们怿q一切将在新的以面向构g为核心的新Y件体pMq行。中国没有庞大的遗pȝ包袱Q以现实的、商业的理由来看中国无法采用现有的、传l的国外软g体系Q必重新徏设?/span>
《Y件中国的Z(x)》就是在阐述q个思想?/span>
五年的实践,我们通过市场的验证,证明了面向构件的软g思想是正的QY件构件化商业上的应用是实际有价值的?/span>
五年的普元还很小Q也q很脆弱Q在面向构g的新软g体系的道路上普元也才仅仅q出了开始的几步。但是我们相信在茫茫的Y件世界中Q中国还是有独特Z(x)Q普元就像是星星之火。ؓ(f)了这星星之火可以燎原Q普元还付?span lang="EN-US">5q?span lang="EN-US">10q或者更长时间的努力Q但是没有什么将可以L我们前进的步伐!
在中国的区中,宽带的连接成为基本配|,所以老的C曄也有同样的问题,而大量的新社个问题就不存在了。即便有无线局域网的技术,有线宽带的接口还是都提供的。新C的好处就是可以在一开始就部v新技术,而不需要走老\?span lang="EN-US">
如今Q全世界都在嚷嚷SOAQ那我们也需要考察国人怎么部vSOAQ中国h怎么部v。研I这个问题,Ҏ(gu)们Y件公司还是对我们的客户都是有极大帮助的,以免再一ơ被我们?span lang="EN-US">?/span>L?/span>厂商误导。因为,国人如何部|?span lang="EN-US">SOA军_国SOA产品的特征,中国人怎么部v军_中国SOA产品的特性?span lang="EN-US">
SOA 的核心是把业务流E功能模块构件化Qƈ对外提供标准的服务,Zq些服务Q企业内部的不同业务部门或是不同企业之间的业务整合就更加Ҏ(gu)一些?span lang="EN-US">SOA的出现是׃互联|技术的出现Q将原来各自为阵?span lang="EN-US">EAI市场标准化?span lang="EN-US">
在美国由于多q的应用pȝQ企业的业务程大多C非标准的形式被掩藏在各种各样的应用系l之中,比如CRMpȝQ?span lang="EN-US">ERPpȝQ?span lang="EN-US">HRpȝQ信用评估系l等{。所以实?span lang="EN-US">SOA架构的第一步是那些掩藏在个应用系l之中的业务功能模块切割开来,加以包装之后成ؓ(f)标准的服务构Ӟ然后q要分散在不同pȝ中的数据整合包装成ؓ(f)数据服务Q最后根据业务的需要同q?span lang="EN-US">BPEL分散的服务q接成ؓ(f)新的服务。所以美国实?span lang="EN-US">SOA的方法ؓ(f)Q?span lang="EN-US">
1 。对原有业务程的提取和包装成ؓ(f)服务构gQ?span lang="EN-US">SCAQ;
2 。对原有数据的整合包装成为数据服务(SDOQ;
3 。用BPEL实现新的程?span lang="EN-US">
q个做法的可行性基于一个重要前提:(x)原有的业务流E可以被切割包装Q代价问题)Q原有的数据可以在一定程度上被标准化包装成ؓ(f)服务Q如果所有的pȝ都需要通过人工切割和包装则代h(hun)太大Q必d在一ơ切割多ơ复用的情况Q否则切割的环节无法产品化。由于美国企业的应用pȝ大量采用了有限厂商的产品比如SAPQ?span lang="EN-US">ORACLEQ?span lang="EN-US">SIEBLE{,一定程度的标准切割是存在的Q尤其是多年?span lang="EN-US">EAI实践Qؓ(f)切割的标准化打下了基。尽如此,大量的基于h工服务的切割q是必须的,所以,印度人有饭吃。而这些切割的工作与中国Y件外包企业多半无兟?span lang="EN-US">
因此Q我们可以预见美国制造的SOA产品把h标准切割?qing)打包功能作为重要的卖点Q也是品的价值所在。市场决定品的特征Q就q么单的逻辑?span lang="EN-US">
中国?/span> SOA 如何实现呢?我们的预见是多半是把pȝ按照SOA提供的标准来Q主是把系l徏设成?/span> SOA 标准的系l,而不是切割和包装Q那些需要切割和包装的系l绝大多C赖于服务而不是品。作个判断基两个前提Q?/span>
1Q??/span> 原有的系l很;
2Q??/span> 那些已经存在的系l很是能够被标准化切割的;
因此Q在中国开?/span> SOA 产品最重要的特征是如何在一个标准的q_上(框架内)构造企业所需要的所有标准服务,q且Ҏ(gu)理和发展(变化Q。中国市?/span> ( 客户 ) 面(f)的主要问题有如下几条Q?/span>
考察中国的市场我们可以作出如下的预言Q?/span>
1Q??/span> SOA 被L市场接受成ؓ(f)标准的体pȝ构;
2Q??/span> 国L?a target="_blank">SOA产品在中国会(x)水土不服Q?/span>
3Q??/span> 原有pȝ主要依靠服务来切割Q或者推倒重来;
4Q??/span> 大量的新建系l将采用标准的小颗粒构g构造流E别的标准服务构gQ?/span>
5?。普元面向构件的中间件将成ؓ(f)
SOA
L中的中国L?br />
引用:
http://gocom.primeton.com/blog/index.php?op=ViewArticle&articleId=891&blogId=62
[摘要]本Web服务架构入门阐述了Web服务架构的基设计原则和W(xu)eb服务的基技术。此外还对其功能q行了介l,q提供了对其q行正式定义的规范链接。本文也是该架构所有规范的参考指南?/p>
对于所有的消息传递系l来_(d)选择信息传输单位是非帔R要的——简单地_(d)Ҏ(gu)息的构成有个一般的认识是必不可的。在Web服务中,一条消息就是一个XML文档信息,它由XML信息集(XML Information SetQ即InfosetQ定义。Infoset是一个抽象的数据模型Q它兼容Z文本的XML 1.0Q也是所有最新XML规范QXML Schema、XML Query和XSLT 2.0Q的基础。由于Web服务架构是以XML InfosetQ而不是某一特定的表现Ş式ؓ(f)基础Q得该架构?qing)其核心协议lg可与其他~码技术兼宏V?/p>
InfosetҎ(gu)一l‘信息项QInformation ItemsQ’对XML文档q行建模。这l可能的信息一般会(x)映射到XML文档的不同功能部件上Q如元素、属性、命名空间和注解。每一信息w有一个关联属性集Q用于提供该的更完整描q。附录B描述了XML文档中的11cM息项。每一个结构严谨的XML文档都会(x)包含一个文档信息项和至一个元素信息项?/p>
除了ZU文本的Infoset~码技术以外,W(xu)eb服务架构q支持另外一UInfoset~码技术——即允许不透明的二q制数据与传l的Z文本的标Cl在一赗W3C XML-binary Optimized PackagingQ即XOPQ格式用多部分MIME原始二q制数据引入到XML 1.0文档中,而不采用base64~码。其配套规范——SOAP 消息 Transmission Optimization MethodQ即MTOMQ则指定如何该格式l定到SOAP。XOP和MTOM是将原始二进制数据与Z文本的XML混合在一L(fng)首选方法,它们取代了目前普遍遭到反对的SOAP with AttachmentsQSwAQ和W(xu)S-Attachments/DIME?/p>
SOAP为在分散的分布式环境中用XML在同{体之间交换l构化分cM息提供了一U简单的轻量U机制。SOAP旨在最大限度地降低对基于不同^台构建的应用E序q行集成的设计成本,q认为最低成本技术最有可能赢得普遍接受。SOAP消息是包含三个元素的XML文档信息,q三个元素是Q?lt;Envelope>?lt;Header>?lt;Body>?/p>
Envelope是SOAP消息的根元素Q它包含一个可选的Header元素和一个必需的Body元素。Header元素是以分散方式增加SOAP消息功能的一U通用手法。Header的每个子元素都被UCؓ(f)一个Header块(Header BlockQ,SOAP定义了几个知名的属性来指示应该p来处理Header块(roleQ以?qing)这U处理是可选的q是必需的(mustUnderstandQ,下文中对q两个属性进行了介绍。目前,Header元素LEnvelope的第一个子元素QBody元素LEnvelope的最后一个子元素Q也是供最l消息接收者用的“有效负载”的容器。SOAP本n没有定义内置的Header块,且只定义了一个有效负载,那就是用于报告错误的Fault元素?/p>
所有的Web服务消息都是SOAP消息Q它们充分利用了XML Infoset。消息有效负载和协议头都使用同一个模型,可以保基础架构头Header和应用程序体的完整性。应用程序发送消息时可能?x)同时考虑Header的内容和消息中的数据。ؓ(f)XML数据模型开发的工具可以用于查和构徏完整的消息。过去,q些益处在某些架构中是没有的Q如DCOM、CORBA和RMIQ它们之中的协议头是一些对应用E序不透明的基架构l节?/p>
SOAP消息是从发送者向接收者单向传送的。多个单向消息的l合可以形成较ؓ(f)复杂的模式。例如,比较常见的模式是同步h/响应消息寏V发送或接收消息的Q何一个Y件代理都被称Z个SOAP节点QSOAP NodeQ。启动消息传输的节点UCؓ(f)原始发送节炏V用和处理消息的最后一个节点称为最l接收节炏V在原始发送节点和最l接收节点之间处理消息的M节点都叫做中介(IntermediaryQ。中介用于模拟单个消息的分布式处理。消息经q的所有中介节点和最l接收节点统UCؓ(f)消息路径QMessage Path.Q?/p>
Z能够识别消息路径的各个部分,每个节点都担M个或多个角色。SOAP角色是一U分cL式,它将一个基于URI的名UC某些抽象功能Q如~存、验证、授权)兌在一赗基SOAP规范定义?个内|角Ԍ(x)Next和UltimateReceiver。Next是一个通用角色Q因为除了发送节点之外的每一个SOAP节点都属于Next角色。UltimateReceiver是消息\径中l端节点所扮演的角艌Ӏ它通常是应用E序Q或在某些情况下是代表该应用E序执行d的基架构?/p>
SOAP envelope的BodyL针对最l接收节炏V而SOAP header则可以针对中介,也可以针Ҏ(gu)l接收节炏Vؓ(f)了提供一个安全且版本可控的消息处理模型,SOAP定义?个属性,用于控制中介和最l接收节点处理某一指定Header块的方式——role、relay和mustUnderstand。角色属性用于确定Header块所针对的节炏VmustUnderstand属性用于指C在Header块未被认出的情况下该节点是否可以忽略该Header块。带有mustUnderstand="true"标记的Header块叫做强制Header块(Mandatory Header BlockQ。标Cؓ(f)mustUnderstand="false"或没有mustUnderstand属性的Header块叫做可选Header块。relay属性指C节点是发送还是放弃未被认出的可选header?/p>
每一个SOAP节点都必M用这3个属性来实现SOAP处理模型。以下步骤详l说明了该模型:(x)
SOAP处理模型旨在实现可扩展性和版本控制。mustUnderstand属性对新Header块的引入是中断变化还是非中断变化q行控制。添加可选header块(如标Cؓ(f)mustUnderstand="false"的headerQ是一U非中断变化Q因ZQ何SOAP节点都可自由忽略它。添加强制header块(如标Cؓ(f)mustUnderstand="true"的headerQ是一U中断变化,因ؓ(f)只有知晓Header块语法和语义的SOAP节点才能够处理SOAP消息。Role、relay以及(qing)mustUnderstand属性沿着消息路径传递这U处理模型?/p>
SOAP所提供的消息传递灵zLWeb服务能够以多U消息交换模式进行通信Q从而满_布式应用的需求。我们在该架构的核心构g中充分利用了其中一些模式,有几U模式已l被证明在分布式pȝ中特别有用,比如使用q程q程调用׃同步h/响应消息交换模式得到了普?qing)。当消息传送潜伏时间失控时Q就需要采用异步消息传递。当使用同步h/响应模式Ӟ昑ּ消息相关性则成ؓ(f)必需?/p>
q播传输QBroadcast TransportQ一对多消息传输得到了普?qing)。原始发送者将其消息强行发送给接收者的模式UCؓ(f)推模式(Push ModelQ。尽这U模式在局域网里很有效Q但在广域网中则不太适用Q接收者也无法调控消息。另一个有用的模式是以应用E序表达Ҏ(gu)些特定消息类别的兴趣的能力ؓ(f)基础的,它发布/订阅模式大行光。通过昑ּ订阅消息源(或主题)Q应用程序可以更好地控制相关信息。接收者从消息源显式请求消息时使用拉模式(Pull ModelQ。在q种模式下,消息是由接收者驱动的。拉模式也可以与发布/订阅模式l合使用。这非常适合于接收者可能要与消息源间歇地断开q接的情c(din)?/p>
Ҏ(gu)SOAP的定义,它与所使用的底层消息传递机制无兟뀂它支持很多可用的消息交换传输机Ӟ也支持同步和异步消息传送与处理。既需要多U传输又需要异步消息传递的pȝ的一个例子是在基于陆地高速网l干U的Web服务与由Ud?sh)话托管的间歇连接的Web服务之间q行通信的系l。这L(fng)pȝ要求一条消息经哪种传输pȝ传输要以该消息在哪个|段内移动ؓ(f)依据。这L(fng)pȝq有一个典型特点,x息传送潜伏时间无法精确定。Web服务开发h员不应力囄定或界定消息传送潜伏时_(d)而应在假定异步消息传递已辑ֈ最大效能的前提下构建系l。与使用q程q程调用时的情况不同Q异步消息传递允许发送者在每一消息传输之后l箋q行处理Q而不必被q阻塞ƈ{待响应。当Ӟ同步h--响应模式也可以构建在异步消息传递的基础之上?/p>
既然Web服务协议完全独立于底层传输之外,适当机制的选择可能p延迟到运行时。这׃ؓ(f)Web服务应用E序提供了在发送消息时定相应传输机制的灵zL。此外,底层传输机制可能?x)随着消息在节点之间的发送而变化,相应圎ͼ针对每一|段而选择的传输机制也?x)随需发生变化?/p>
管存在着q种一般的传输的独立性,大多数第一代Web服务都用HTTP来进行通信Q因是SOAP规范内所包含的一U主要绑定协议。HTTP以TCP作ؓ(f)其底层传输协议。但是,TCP在设计时引入了不必要的处理开销。有些应用协议模式与用户数据报协议(即UDPQ?User Datagram ProtocolQ的语义学比较匹配,q些模式对于受设备及(qing)其他资源U束的系l特别有用。UDP不像TCP那样h传输保证Q它提供最大限度的数据报消息传递。与TCP相比Q它需要的实施资源较少。此外,UDPq提供了多\q播功能QMulti-cast CapabilitiyQ,使一个发送者可以将消息同时发送给多个接收者?/p>
对于要在q种多传输情况下发送和d的消息来_(d)要让关键的消息传递属性ؓ(f)多个传输所携带Q就需要一U共用机制。ؓ(f)此,W(xu)S-Addressing规范定义?lSOAP Header块:(x)
端点引用是WS-Addressing的最重要的方面,因ؓ(f)与仅使用URI相比Q它们可为更l粒度的d提供支持。它们广泛用于整个Web服务架构。端点引用包?条关键的信息Q基地址、可选的引用属性集和引用参数。基地址是一个URIQ用于识别端点,出现在指向该端点的每一SOAP消息中的To Header块中。引用属性和引用参数是用于ؓ(f)该消息提供附加发送或处理信息以补充基地址的Q意XML元素的集合,它们以文字Header元素来表C。当使用端点引用来构建端Ҏ(gu)息时Q发送者负责提供作为Header块的所有引用属性和引用参数?/p>
引用属性和引用参数之间的区别在于它们如何关联服务元数据。Web服务{略和契U仅Z其基地址和引用属性。通常Q基地址和引用属性用于识别某一l定的已部v服务Q引用参数用于识别该服务所理的特定资源?/p>
引用属性和参数是那些预期只被最l接收者处理的单的不透明XML元素。它们有助于保可用于分z、发送、烦引或其他发送端处理zd的信息被包含在给定的消息中。尽中介预期不?x)对该信息进行处理,但某些中介(如防火墙或网x务程序)却有可能使用某些引用属性或参数来进行消息发送、消息处理。引用属性有很多用途。服务类QClasses of ServiceQ和专用实体标识W(Private Entity IdentifierQ就是两个例子。在服务{例子中,引用属性可以用于区分针Ҏ(gu)准客L(fng)Web服务和针对“黄金”客L(fng)Web服务Q后者提供了更高的服务质量和增强功能——可能是通过附加的操作或附加的绑定——在逻辑上Ş成两个不同的端点。这些属性只在一个会(x)话中讄一ơ,然后便在交互的其余所有部分重复用。引用属性另一个用途的例子是以一U对pȝ不公开发送消息的方式来识别客L(fng)机制。这两种引用属性的l合可以高效地将消息发送给一l适当的服务器Qƈ高效地确定与某一特定用户有关的应用状态。这些例子还展示了引用服务实例的数据和引用用户实例的数据如何用引用属性来表示?/p>
需要特别指出的是,引用属性还有助于对׃n一个共同的URL和作用域的WSDL实体集合q行d。WSDL是将Web服务描述为操作消息的一l端点的XML格式Q它首先抽象地指定其实体Q然后将其具体地l定到特定实例。具体而言Q消息和操作l抽象定义之后,被绑定到带有|络传输和消息格式信息的一个端炏V因此,从WSDL的角度来看,当针对不同的具体实体Q如输入或输出消息、portTypel定、端口或Web服务中用一个共同URL的服务)Ӟ对应端点引用的引用属性应该不同?/p>
使用引用参数的两个例子是基础架构和应用水q뀂引用参数的基础架构例子可以是发送给某一事务处理监视器的事务/征募IDQEnlistment IDQ。在一个购书的场景中,书的ISBN号可能就是一个引用参数应用水q例子?/p>
所有的Web服务交互都是通过交换SOAP消息来进行的。ؓ(f)了提供一个健壮的开发和操作环境Q服务是用机器可ȝ元数据来描述的——元数据支持互操作性。Web服务元数据可以服务于若干个意图。它用于描述Web服务支持的消息互换格式和某一服务有效的消息交换模式。元数据q用于描q服务的功能和需求。元数据的最后一UŞ式叫做“服务策略(Policy of Services.Q”。消息互换格式和消息交换模式用WSDL来表C,{略使用WS-Policy来表C,契约QContractQ用上述三种元数据来表示。契U是应用程序与它们所依赖的服务的内部实现l节隔离开来的抽象?/p>
Web服务描述语言Q即WSDL——Web Service Description LanguageQ它是被q泛用于描述Web服务基本特征的第一U手Dc(din)用WSDL描述的消息被归ƈ为定义基本消息模式的若干操作。这些操作被归ƈ为称作端口的若干个接口,它们详细说明了抽象的服务契约。端口和l定则用于将portTypes与具体传输和physical 部v信息兌在一赗WSDL描述是自动识别目标服务的所有特征和启用软g开发工L(fng)W一步。WSDL指定h消息必须包含什么以?qing)响应消息在使用无歧义符h的显CZ(x)是怎样。WSDL文g用于描述消息格式的符hZXML模式的。这意味着它既是编E语a中立的又是基于标准的Q这使得它很适合于描q可通过多种q_和编E语a来访问的服务接口。除了描q消息内容以外,W(xu)SDLq可以定义服务在何处是可用的Q以?qing)哪些通信协议被用于与该服务交谈。这意味着WSDL文g可以指定用于~写与某一Web服务q行交互的程序的基本元素。有几种工具可用于读取WSDL文gQ以?qing)?f)~制句法正确的Web服务消息生成所需代码?/p>
管WSDL是一个不错的L(fng)Q但它ƈ不以描qWeb服务的方斚w面,W(xu)SDL只能表示较少的一l属性。Web服务所必需的更详细信息包括Q?/p>
W一代Web服务必须使用专有协议来交换带外(Out of BandQ的元数据,q一问题可以使用WS-Policy来解冟뀂WS-Policy提供了一U通用模型和语法来描述和传达W(wng)eb服务{略。它指定了一个概念基集,它可以被其他Web服务规范使用和扩展,以描q更为广泛的服务需求和功能。WS-Policy引入了一个简单的可扩展语法来表示{略断言QPolicy AssertionQ,以及(qing)一个处理模型来解释它们。断a可以合ƈ到逻辑选项中?/p>
{略断言使编Eh员要么在开发时、要么在q行时向服务信息中添加适当的元数据。开发时{略的例子包括消息大的最大允许值或所支持规范的确切版本,q行时策略的例子包括宕机时的必备服务或某一l定的管理过E(定期的硬件维护)期间Web服务的不可用性。可以对单个的策略断aq行分组Q以形成{略选项QPolicy AlternativeQ。策略是{略选项的集合。ؓ(f)了便于进行互操作Q策略是Ҏ(gu)其XML Infoset表示形式来定义的。ؓ(f)了在保持互操作性的同时减小{略文档的大,又定义了{略的紧凑Ş式?/p>
{略用于传达两个Web服务端点之间的交互条件。满策略中的断a通常?x)引发反映这些条件的行?f)。因此,{略断言评估是识别兼容行为的中心。当且仅当请求者满求,x供了q一功能、与该断a相符Ӟh者才支持{略断言——策略的构造块。一般而言Q这U决定要使用特定领域的知识来做出。请求者支持策略选项的条件是当且仅当h者支持选项中的所有断aӞq种军_是用策略断a的结果机械性地做出的。同P当且仅当h者至支持策略中的一个选项Ӟh者才支持{略。一旦策略选项l过评估Q该军_也是机械性地做出的。请注意Q虽然策略选项是互斥的Q但一般来说要定多个选项是否可以同时得到支持也是不太可能的?/p>
Z以互操作的Ş式传辄略,{略表达式(Policy ExpressionQ采用策略的某种XML Infoset表示形式。普通Ş式的{略表达式是最单的InfosetQ同P可选的Infoset允许通过大量构造来z地表达{略。策略表辑ּ是策略的基础构造块。有两个q算W用于表达断aQAll和ExactlyOne。Allq算W表C策略选项集中的所有断a都必适用于要满的策略断a。ExactlyOneq算W表C策略选项集中只有一条断a必须适用于要满的策略断a?/p>
{略层位于WSDL描述之上Qƈ对它q行了扩充。策略与Web服务元数据(如WSDL定义或UDDI实体Q的兌是通过使用WS-PolicyAttachment来实现的。策略可以作为其定义所固有的一部分或独立地与资源关联在一赗机制就是针对这些不同目的而定义的。需要特别指出的是,{略也可以与单个的SOAP消息一起用。如果ؓ(f)某一实体制作了多个策略附Ӟ它们?x)共同确定该实体的有效策略(Effective PolicyQ。在WSDL层次l构的不同层ơ上选用{略时一定要心Q因为层ơ结构每一层次的最l结果就是一个有效策略。作我描q和人所能理解的明确性的一般规则,在策略断a所适用的层ơ结构的每一层次上详l地重复该策略断aQ比单地依赖于计有效策略的机制更可取。在一个WSDL文档中,与部|端点的消息交换可以同时包含所?cM题的有效{略。WS-Policy和W(xu)S-PolicyAttachment相结合可以提高应用程序来发现和推出其他服务所支持的策略的能力。添加策略的灉|性是Ҏ(gu)q消息交互的WSDL信息的一个重要补充?/p>
WSDL和W(xu)S-Policy都定义了元数据格式,但都没指定某一l定服务获得或访问元数据的机制。一般来_(d)服务元数据可以通过使用许多Ҏ(gu)来获取。ؓ(f)了支持服务的自我描述QW(xu)eb服务架构在WS-MetadataExchange中定义了ZSOAP的元数据讉K协议。GetMetadata操作用于索在h的端点引用中扑ֈ的元数据。Get操作cMQ但用于索不同的元数据:(x)在元数据部分引用Qƈ要在存储它的端点引用中检索的元数据?/p>
使用WS-MEX来交换的元数据可以描qCؓ(f)资源。资源即可由某一端点引用d的Q何实体,q且在该端点引用中,该实体可以提供一U其自n的XML表示形式。资源构成了构徏Web服务中的状态管理所需的基?/p>
什么是互操作性概要(Interoperability ProfileQ?br /> 概要QProfileQ是一l指导原则,主要针对于核心协议以?qing)Web服务规范的用。这些指导原则对于规范的通用设计来说是必需的。在某些情况下,开发h员需要额外的帮助来确定用哪些Web服务Ҏ(gu)来满某一特定需求。互操作性概要还用于解决Web服务规范不够明确的领域中的含p性问题,以确保所有实施都以相同的方式来处理SOAP消息?/p>
WS-I基本概要
W一个Web服务概要是由Web服务-互操作性组l(WS-IQW(xu)eb Services-Interoperability OrganizationQ发布的。WS-I已经完成了其W一个概要,q简单地UCؓ(f)基本概要1.0。该概要主要ZSOAP1.1和W(xu)SDL 1.0的互操作使用来提供指导原则?/p>
本节介绍Web服务架构中用于提供某一pȝ内部的消息完整性、n份验证和机密性、安全性o(h)牌交换、消息会(x)话安全性、安全策略表C和服务联盟安全性的规范。提供这些特性的规范是WS-Security、WS-Trust、WS-SecureConversation、WS-SecurityPolicy和W(xu)S-Federation?/p>
安全性是计算机系l的一个基本方面,其是那些由Web服务l成的系l。安全性必L健壮而有效的。因为系l只Ҏ(gu)息格式和合法的消息交换作出硬件假设,因此安全性必d于一致通过的明机制和假设。安全基架构q应该具有够的灉|性,以支持不同组l所需的不同安全策略?/p>
当安全传输可用于通信Web服务Q如安全套接层(SSLQ和传输层安全性(TLSQ之间时Q构建安全性解x案就得到了简化。有了安全传输,q些服务׃需要参与单个消息的完整性和机密性的l护Q它们可以依赖于底层传输。不q,现有的传输安全性是一个仅限于点对Ҏ(gu)息传递的解决Ҏ(gu)。如果在使用安全传输时存在中介,则最初发送者和最l接收者需要相信这些中介能够帮助提供端到端的安全性,因ؓ(f)每个|段都是安全的。除了要明确CL有中介外Q还必须考虑到其他风险,如消息的本地存储和中介受到损害的可能性?/p>
Z最大限度地扩大Web服务的作用范_(d)当通信端点不相信中介时Q必L供端到端的安全性,那就需要更高别的安全协议。作为另一U选择Q端到端消息安全性比点对点传输安全性具有更丰富的内涵,因ؓ(f)它支持Web服务所需的基于SOAP的松耦合、联合、多传输和可扩展环境。这U功能强大而又灉|的基架构可以通过现有技术和W(xu)eb服务协议的组合来开发,同时q可以缓解与点对Ҏ(gu)息传递相兌的许多安全风险?/p>
管Web服务的安全需求很复杂Q但Zq没有发明新的安全机制来满ZSOAP的消息传递的需要。现有的分布式系l安全性方法,如Kerberos、公钥加密技术、X.509证书{已l够用了。只有应用现有的SOAP安全Ҏ(gu)Ӟ新机制才是必需的。这些新安全协议的设计充分考虑了可扩展性,以便来能够加入新的Ҏ(gu)。一个主要的设计目标是要提供自我描述安全性属性(为包括SOAP在内的Web服务架构而设计)机制?/p>
Web服务安全性的基础是输入消息要证实一l关于发送者、服务或其他资源的断aq一需求。我们称之ؓ(f)断言或安全性断a。典型的安全性断a包括w䆾、属性、关键胦产、权限或功能。这些断a是用包裹在XML中的二进制安全性o(h)牌编码的。在传统的安全性术语中Q这些安全性o(h)牌表C功能和讉K控制的合。很多方法都被用于创建安全性o(h)牌。Web服务可以从本C息构建定制的安全性o(h)牌。反q来Q安全性o(h)牌也可以从X.509认证机构或Kerberos域控制器{专业服务检索。ؓ(f)了实现服务之间的通信自动化,需要一个表辑֮全需求的Ҏ(gu)?/p>
服务可以使用WS-SecurityPolicy中所指定的策略断a来表辑օ安全需求。通过索这些策略断aQ应用程序可以构建符合目标服务需求的消息。断a、安全性o(h)牌和{略所提供的这l特性以?qing)从Web服务索它们的能力非常强大。这U普通的Web服务安全模式支持一些更具体的安全模式,如基于n份的授权、访问控制列表和Z功能的授权。它允许使用现有技术,如X.509 公钥证书、基于XML的o(h)牌、Kerberos׃n的秘密票和密码摘要。这U普通模型对于构Z用更复杂的方法来q行更高U别的密钥交换、n份验证、基于策略的讉K控制、审核和处理复杂的信dpȝpȝ已经_。也可以使用代理和中l服务。例如,可以构徏中服务来加Z于信任边界的安全{略Q出界的消息被加密,而界内的消息不加密。以前的解决Ҏ(gu)没有提供q种灉|性和完善E度。附录C中所描述的常见安全攻d含了pȝ威胁的基本分c,而这些系l威胁是在选择Web服务安全Ҏ(gu)时应认真加以考虑的?/p>
本节的余下部分将探讨Web服务安全模式的应用。两个重要主题是安全通信和安全应用。没有假定安全的消息传输Q这也不是安全的Web服务所必需的?/p>
消息U安全性是端到端安全性的关键构造块。用消息安全性时Q无需传输U安全性。对消息U安全性的要求是消息完整性、消息n份验证和机密性。消息完整性确保消息不能在不知不觉中被更改。用XMLSignature可确保消息的修改能够被察觉。消息n份验证可识别发送消息的M。如果用了公钥加密Q就可以定M的唯一w䆾。将公钥加密与经受信L认证的密钥一起用可以实现这Un份验证。不q,如果使用了对U密钥加密,情况׃一样了——只有知道共享密钥的M才能被识别。消息机密性可保在传输期间未l授权的W三方不能阅L息。SOAP消息是通过使用XMLEncryption [XMLENC]和安全性o(h)牌来保证机密性的?/p>
完整性、n份验证和机密性机制将初始消息Q或该消息的某些部分Q作入,生成的数据Q如校验和)作ؓ(f)输出。例如,在某U简单情况下QXML元素的签名可能会(x)作ؓ(f)XML元素所有字W的散列的非对称加密来实现。然后该加密散列可以存储在该消息中,q在该消息中传送。可以将XML文档看作字符丌Ӏ就像XML{一P逐字W地比较也是非常重要的安全性操作。一字之差会(x)D不同的结果。串行化是用于表C“在U쀝对象的Ҏ(gu)。例如,串行化可用于创徏SOAP消息的XML表示。不同串行化软g所D的Q何无关紧要的排字差异都会(x)被消息处理Y件忽略,但会(x)对安全性Y件生很大媄响。XML消息的Infoset表示形式改进了这一问题。要使XML{生效Q消息必{换成一个对所有方都是一致的XML表单。规范化是一个术语,来描q用于生成一致的换行W、制表间隔、属性排序和l束标签样式{非关键信息视图的方法。签名包含了用于使消息接收者能够完全像发送者那样处理安全信息的规范化方法。某一服务所使用的特定的规范化方法是要放|在一个WSDL portTypel定或WSDL端口的有用的{略断言?/p>
WS-Security指定了消息完整性和机密性机制以?qing)单一的消息n份验证。对于消息完整性,该规范详l描qC加密{是如何表Cƈ与SOAP消息的特定部分关联的。该Ҏ(gu)允许L格式良好的消息片D|有单独的{。与之类|机密性是通过l构良好的消息片D늚加密来实现。n份验证是使用数字{来实现的。WS-Security规范描述了当前常用的安全机制Q也没有排除来d新机制的可能性。因为SOAP处理模型使用Header元素来作出处理决定,所以是军_SOAP消息中的哪些元素需要加密时一定要多加心?/p>
在决定要对哪些元素进行加密以?qing)要使用哪些加密法ӞW(xu)eb服务设计人员一定要清楚消息是如何处理的。当某些特定的Header元素需要由W三Ҏ(gu)中介来处理时Q这些决定就更ؓ(f)重要了。如果这些参与者对适当的解密数据或对在加密XML元素时所使用的约定毫无所知,它们无法实现正操作。此外,每个处理节点Ҏ(gu)息中包含的安全信息都必须有个一般的了解。加密某一Header中XML元素的一个自焉择是对它q行完全加密Q用初始元素替代加密数据cd的元素。这U简单的Ҏ(gu)有些~点。例如,中介不太好确定必d理哪些元素(带有mustUnderstand="1"属性的元素Q。另外,当元素类型发生变化时Q确定其初始cd比较困难。另一U方法是对元素进行{换,使得q行正确的SOAP处理所需的所有关键属性都保持不变Q且对初始元素进行了加密Qƈ攑֜一个特D的子元素中。这U方法的优点是即使不知道如何解密元素的中介也能实现正的处理。这U方法的一个缺Ҏ(gu)它要求所有参与者都了解用于表示初始元素的约定。尽WS-Security目前没有对这U方法提供指|但我们预期将来会(x)提供的。相比之下这U方法更好一些,因ؓ(f)它可实现所有SOAP Header元素的正处理?/p>
WS-Security的概要规范中描述了几U安全性o(h)牌。针对表C用户名的o(h)牌、X.509证书和基于XML的安全性o(h)牌的概要都已l开发出来。基于XML的安全性o(h)牌包括安全性断a标记语言QSAMLQSecurity Assertion Markup LanguageQ和可扩展权限标记语a/权限表达语言QRELQRights Expression LanguageQ。Kerberos的使用规范q未成型?/p>
WS-I基本安全概要
WS-I要发布的最新的互操作性概要之一是基本安全概要(BSPQBasic Security ProfileQ。该概要提供了WS-Security和各U安全性o(h)牌,如Username和X.509证书令牌的实现指对{该概要用于补充和完善WS-I基本概要?/p>
安全性o(h)牌是提供端到端安全解x案所必需的。这些安全性o(h)牌必d消息处理的参与者之间实现直接或间接׃n。各参与者还必须定断言的凭证是否可信。这些信dpM安全性o(h)牌的交换和代理ؓ(f)基础Qƈ存在于已l确定的支持信Q{略中。例如,某一代理的o(h)牌有多少可信Q是ql管理员和他们确定的信Q关系军_的。提供安全性o(h)牌的服务五花八门。这是各U底层安全技术首先ؓ(f)Web服务所使用的领域。ؓ(f)了提供一U与安全技术无关的l一标准的解x案,新协议是Zd之间的安全性o(h)牌交换而设计的?/p>
WS-Trust以用于请求、发出和代理安全性o(h)牌的协议对WS-Securityq行了补充。需要特别指出的是,其中定义了用于获取、发行、更新和验证安全性o(h)牌的操作。该规范的另一个新Ҏ(gu)是建立Cdpȝ机制。IPsec或TLS/SSL之类的网l和传输保护机制可以与WS-Trustl合Q以适应不同的安全性需求和情况?/p>
安全性o(h)牌可以直接从某一适当的发行者处甌获得Q或者通过委托某一受信ȝW三Ҏ(gu)获取。o(h)牌还可以Z意料地获得。例如,令牌可以从某一安全权威机构发送到一个ƈ未明申误令牌的某一斏Vؓ(f)此,pȝ理员要定初始信Q关系Q如某一l定服务指定ZȝҎ(gu)务。这U方法类g目前Web上用于自展安全性的Ҏ(gu)。从该服务获得的所有o(h)牌受信Q的程度与受信ȝҎ(gu)务本w相同。例如,如果某根服务只有断言A和B得到信QQ且某一消息包含断言A、B和CQ则该消息中只有断言A和B得到信Q。配|灵zL是通过信Q关系授权提供的。ؓ(f)了处理在退回或发出安全性o(h)牌之前需要各方之间的一个交换集的情况,定义了用于验证、协商和交换的方法。一U称为“challenge”的Ҏ(gu)形式的交换ؓ(f)某一方证明它拥有与某一令牌兌的密钥提供了一U方法。交换的其他cd包括传统的协议隧道。WS-Trust详细说明了如何扩展该规范Q以支持更多的o(h)牌交换协议,而不仅仅是所l出的这两个例子?/p>
表示安全性断a的安全性o(h)牌是׃个受信QҎ(gu)一个通过一个授权链的根发行的。这些安全性断a用于验证消息W合正在施行的安全策略。它们还验证断言者的属性是通过{来校验的。在代理的信L式中Q即由受信Q的中介分配安全性o(h)牌的模式中,{可能不验证断a者的w䆾Q而验证中介的w䆾。该中介可能只断a者的w䆾?/p>
用于消息w䆾验证和机密性的某些机制可能?x)耗用大量的资源。需要特别指出的是,许多加密技术都?x)显著消耗处理能力。当消息的安全性是逐一得到保证Ӟq些代h(hun)通常是无法避免的。不q,当两个Web服务q行许多消息的交换时Q可以用比WS-Security中定义的Ҏ(gu)更ؓ(f)高效和健壮的消息机密性方法。这些方法是Z对称加密的,在保证消息会(x)话的安全时应使用它们?/p>
WS-SecureConversation在基于共享密钥(如对U加密)的两个通信方之间定义了一个安全上下文。在整个?x)话期内Q安全上下文在各通信方之间始l是׃n的。会(x)话密钥由׃n密钥z而来Q用于解密在?x)话中发送的单个消息。安全上下文在线表示Z个新的安全性o(h)牌类型(即SCT QSecurity Context TokenQ?/p>
规范为徏立安全会(x)话各方之间的安全上下文定义了3U不同方法。第一U,由安全性o(h)牌服务创建,且必ȝ?x)话发vҎ(gu)取ƈ传送。第二种Q通信一方创建安全上下文q过消息传递给另一斏V第三种Q通过协商和交换创建安全上下文。Web服务?x)选择最能满_需要的Ҏ(gu)。必要时可以对安全上下文q行修正。更新安全上下文的一个典型例子是廉安全上下文的截止旉。安全上下文令牌隐含或包含了一个共享密钥。该密钥用于{、加密消息。当使用׃n密钥Ӟ通信各方可以选用不同的密钥派生模式。例如,可以z?个密钥,q样双方便可以用单独的密钥来签名和加密消息。ؓ(f)了保证密钥未曄q和保持高度的安全性,应用后l的z密钥。用这U方法来保证?x)话的安全性是一U更好的选择。WS-SecureConversation规范定义了一U方法来指示l定消息正在使用哪些z密钥。所有派生算法都是通过URI来识别的?/p>
WS-SecurityPolicy通过用一U符合WS-Policy的语a指定安全{略断言来完善WS-SecurityQ其6U断a涉及(qing)安全性o(h)牌、消息完整性、消息机密性、消息对SOAP中介的可见性、对安全Header的约束和消息寿命。例如,某一{略断言可能要求所有消息都使用某一权威机构提供的公钥来{Q或该n份验证要ZKerberos?/p>
除了我们已经介绍的方法以外,应用E序安全性还需要更多的Ҏ(gu)。例如,在某一信Q域中有效的n份在其他信Q域中很可能没有意义。要让不同信d中的服务能够验证w䆾的有效性,需要适当的机制。WS-Federation定义了一些机Ӟ以支持n份、帐戗属性、n份验证和w䆾验证信息跨信d的共享。利用这些机Ӟ多个安全域可以通过在由多方参与的Web服务之间支持和代理n份、属性和w䆾验证的信任而结成联盟。该规范扩展了WS-Trust模型Q属性和W名可以被整合到令牌发行机制中,从而Ş成一U多域n份映机制。这些机刉支持单点d、退出和W名Qƈ描述了专业服务对于属性和W名的作用?/p>
通过w䆾联盟Q很多要求都可以得到满。就拿将一名员工与光d联v来的例子来说Q公司A的Jane从OfficeSupplyStore.comq行采购Q公司A和OfficeSupplyStore.com之间有一个采购合同。因为Jane的n份是与公司A兌的,所以可以让Ҏ(gu)依据该合同来q行采购。第二个例子是将一个h映射到多个笔名。大家可能只知道Joe使用joe@companya.com工作。他q可能有其他w䆾Q如joe_bloggs@hotmail.com和josephb@cornell.edu。通过w䆾联盟Q系l可以确定这些n份都是同一个Joe?/p>
Web服务联合安全架构中定义了两个一般的h者(消息发送者)c:(x)被动和智能(zdQ。被动请求者是只用HTTP且从来不发出安全性o(h)牌的服务。智能请求者是能够发出包含诸如WS-Security和W(xu)S-Trust中所描述的那些安全性o(h)牌的消息的服务。传l的ZHTTP的Web览器就是被动请求者的一个例子。定义这两种h者的行ؓ(f)的概要规范现已开发出来。对于智能请求者,activeh者概要详l说明了单点d、退出和W名是如何通过使用SOAP消息而整合到Web服务安全模型中的。实际上Q该概要描述了在h者上下文中实现WS-联盟中所描述的模式的Ҏ(gu)。它详细说明了各U安全性o(h)牌的要求。作些安全性o(h)牌要求中之一的一个例子,当不使用安全通道ӞX.509证书的整个o(h)牌必d含权威机构的名称和签名。该概要q要求X.509令牌包含主题标识W,以唯一地识别授之以该o(h)牌的主题?/p>
本节介绍Web服务架构中用于定位网l上Web服务和确定该服务可用性的功能lgQUDDI和W(xu)S-Discovery。Web服务发现是在没有人工q预的情况下实现服务q接自动化的关键。Web服务发现Ҏ(gu)反映了计机pȝ中查找信息的两个最常见Ҏ(gu)Q查看一个众所周知的目录,或将一个请求广播给所有可用的监听器。UDDI注册表就相当于该目录Q发现协议用于广播请求?/p>
通用描述发现和集成协议,即UDDI——U(ku)niversal Description Discovery and Integration ProtocolQ指定了一个用于查询和更新Web服务信息通用目录协议。该目录包含关于服务提供商、它们所托管的服务以?qing)这些服务所实施的协议的信息。该目录q提供了用于向Q何注册信息添加元数据的方法。如果Web服务信息存储在众所周知的位|时Q则可以使用UDDI目录Ҏ(gu)。一旦找到目录,可以发送一pd查询h以获取想要的信息。UDDI目录位置通常是通过pȝ配置数据从带外(Out of BandQ获得的?/p>
对于如何部vUDDI注册表,W(xu)eb服务提供商有很多不同的选择。部|方案不外乎3个类别:(x)公共、企业外和企业内。ؓ(f)了支持公共部|Ԍ以Microsoft、IBM和SAP为首的一l供应商L推出了UDDI企业注册表[UBRQUDDI Business Registry]。UBR是一个可跨多个主持企业复制的公共UDDI注册表,它既是基于Internet的Web服务资源Q又是Web服务开发者的一个试验台。尽目前公共UDDI实施已经受到了最大关注,但UDDI的早期采用者仍更們于用企业外和企业内Ҏ(gu)。在q两U部|情况下Q企业要部v一个专用注册表Q而且更严密地控制注册信息cd也是可能的。这些专用注册表可能只供一个企业用,也可能供若干l业务合作伙伴用。UDDIqؓ(f)注册表间的复制和跨部|的信Q联盟定义了协议。用这些协议进一步增加了可用于实施者的部vҎ(gu)数量。对于所有的部vҎ(gu)QUDDI目录都包含了Web服务?qing)其托管地的详细信息。UDDI目录Ҏ(gu)3个主要部分——服务提供商、所提供的Web服务和实施绑定。其中的每一部分都逐渐提供有关Web服务的更详细信息?/p>
大部分的一般信息都描述服务提供商。该信息不针对Web服务软gQ而是针对直接负责该服务的开发者或实施者。服务提供商信息包括名称、地址、联pMh?qing)其他管理细节。所有的UDDIw有多个元素来支持多语a描述。可用的Web服务列表存储在服务提供商中。这些服务可能是Ҏ(gu)它们的预定用途来l织的:(x)它们可能被分成不同的应用领域、地区或M其他适用的模式。存储在UDDI注册表中的服务信息只包含服务描述和一个指向它所包含的Web服务实施的指针。由其他提供商托的服务链接UCؓ(f)‘服务映(Service ProjectionQ’,也可能被注册?/p>
UDDI服务提供商实体的最后部分是实施l定。该l定Web服务与切的URI兌hQ以定在何处部|服务,它还指定了访问协议,q包含所实施的确切协议的参考资料。这些细节对于开发h员编写调用Web服务的应用程序已l够。详l的协议定义的是通过一个称为“类型模型(即tModelQType ModelQ”的UDDI 实体提供的。在许多情况下,tModel都会(x)引用一个描qSOAP Web服务接口的WSDL文g描述Q但tModel的灵zL也几乎可以描述MU类的资源。对于在UDDI中注册的每一个提供商或服务来_(d)来自标准分类学(如NAICS和较古老的国标准行业代码Q或其他w䆾识别Ҏ(gu)Q如Edgar Central Index KeyQ的元数据都可用于分cM息和提高搜烦准确性。可用的分类学和标识W方案集作ؓ(f)M实施的一部分Q是可轻松扩展的Q因此可以对其进行定制以支持M特定的地域、行业或企业需求?/p>
动态Web服务发现是以不同方式提供的。作为在已知注册表中存储信息的另一U方案,动态发现的Web服务?x)明地声明它们的到达、离开|络。WS-Discovery为通过多\q播消息来声明和发现Web服务定义了协议。当Web服务q接到网l时Q它通过发送一条Hello消息来声明它的到达。在最单的情况下,q些声明的跨|发送用多路广播协议——我们称之ؓ(f)自组l网l。该Ҏ(gu)q最大限度地减少了网l上的轮询需要。ؓ(f)了限制网l信息流通量和优化发现过E,pȝ可能?x)包含一个发C理。发C理用一个众所周知的服务位|取代了发送多路广播消息的需要,从而将自组l网l{变成托管|络。利用配|信息,代理服务集合可以q接在一P从而将发现服务扩展到多l服务器Q从一台机器扩展到多台机器?/p>
因ؓ(f)发现代理自n也是Web服务Q它们可能会(x)用自׃用的Hello消息来声明它们的到场。接收该消息的Web服务然后可以利用该代理的服务Q而无需再用干扰较多的一对多发现协议。当服务d|络ӞW(xu)S-Discovery?x)指定一个Bye消息以发送给|络或发C理。该消息通知|络上的其他服务d的Web服务不再可用?/p>
Z完善q种服务声明和离开的基本方法的不QW(xu)S-Discovery定义了两个操作——Probe和ResolveQ以定位|络上的Web服务。对于自l织|络QProbe消息被发送给多\q播l,q且与该h匚w的目标服务会(x)响应直接反馈给h者。对于利用发C理的托管|络QProbe消息则以单\q播方式发送给发现代理。如果按名称定位Web服务Q则使用Resolve消息。Resolve消息只以多\q播模式发送。Resolve cM于地址解析协议Q即ARPQ它?yu)IP地址转换成其对应的物理网l地址。WS-Discovery规范q支持这L(fng)pȝ配置Q将Probe消息发送给一个已l通过其他理Ҏ(gu)建立h的发C理,如通过使用众所周知的DHCP记录?/p>
动态发现服务的能力实现了Web服务理的自举。与WS-Eventing?qing)其他协议相l合Q更复杂的管理服务也可以通过使用q种动态发现基架构来构建。动态发现还Web服务架构扩展到设备,如那些目前可能实施通用x即用QUPnPQ协议的pȝ——这是该架构真正实现通用的重要一步。例如,借助WS-Discovery和W(xu)S-EventingQ打印机或存储介质等讑֤可以作ؓ(f)Web服务U_到系l中Q而且无需专门的工h协议?/p>
Web服务讑֤概要规范
Web服务讑֤概要规范对在资源受限的设备上应该实施Web服务架构规范家族的哪个子集提供了指导。该概要力图在由于资源限制而作出折hQ在可用的丰富功能和最重要的功能之间找到^衡?/p>
本节介绍可以提供可靠的消息传送、事务行为和能够在一lWeb服务之间q行昑ּ协调的Web服务架构lg。定义这些功能的规范是WS-ReliableMessaging、WS-Coordination、WS-AtomicTransaction和W(xu)S-BusinessActivity?/p>
当多个Web服务必须完成工作的某一共同单元或依照某U共同的行ؓ(f)q行操作Ӟ对于使用哪个协议必须达成p。Web服务之间q种最低限度的协调是不可避免的。协调协议还必须能够定q同意已达成一个共同目标。Web服务之间的每一个交互都可以看作一U协调。一致性协议ؓ(f)该架构提供了一个改q的Z(x)Q即参与者服务在它们准备共同完成的Q务方面将获得成功。在传输丢失了消息和服务失常ӞW(xu)eb服务架构仍然能够正常工作?/p>
M多方协调都可以通过接连地随需加入更多参与者从两方协调逐步发展而成。两方协调可能是自发的,也可能需要一个指定的协调者。广泛用的自发协调协议的一个例子是同步h—响应消息传递模式。这是一致性协调的最单Ş式之一Q对于每个工作请求,接收方Web服务必须完成所有预期工作之后才能向h者返回数据。双斚w遵@q种严格的模式,无需昑ּ协调服务?/p>
很多情Ş都可能中断两个服务之间的消息交换。当使用不可靠的传输协议Q如HTTP 1.0和SMTPQ来q行传输或当消息交换跨多个传输层q接Ӟq更?x)成Z个问题。消息可能会(x)丢失、被复制或重新排序,W(xu)eb服务可能?x)失败ƈ失去易变状态。WS-ReliableMessaging是一个基于特定的传送保证特征实现可靠消息传送的协议。该规范定义?个可l合使用的不同断aQ?/p>
臛_一ơ和臛_一ơ保证相l合的结果是恰好q行一ơ传送。由于Web服务架构的设计与传输无关Q因此所有传送都与所用的通信传输工具或其l合无关。由于开发h员必预的潜在传送失败模式数量减,故用WS-ReliableMessaging可以化系l开发?/p>
可靠的消息传送不需要显式协调者。当使用WS-ReliableMessagingӞ参与者必L据SOAP消息Header中所发送的信息识别协议。作Z个组传输的消息集合称为消息序列(Message SequenceQ。消息序列可以由发v?发送者或Web服务创徏Q当建立一U双向关联时通常由它们共同创建。序列是使用CreateSequence和CreateSequenceResponse消息昑ּ创徏的。当惌的最l结果是用两个单向序列来充当一个双向序列时Q发赯将提供Web服务所要用的序列。该序列的ID由发赯包含在CreateSequence消息中?/p>
WS-ReliableMessaging中定义了几个{略断言。这些策略断a用WS-Policy中定义的Ҏ(gu)来表C?/p>
可靠的消息传递协议简化了开发h员ؓ(f)在传输不断变化的情况下传输消息而必ȝ写的代码。也是_(d)底层基础架构可以Ҏ(gu)息在端点之间的正怼输进行验证,必要时还?x){发消息ƈ重复。应用程序不需要Q何附加逻辑来处理提供传送可能需要的消息转发、重复消息的消除、消息重新排序或消息认。WS-ReliableMessaging的实施是跨发赯和服务分布的。那些非‘在U쀙可见的特征Q如消息传送顺序,是通过实施WS-ReliableMessaging规范来提供的。虽然由传输损失D的消息重发等特征是通过不ؓ(f)应用E序所知的消息传递层来处理的Q其他端到端特征Q如依次传送)都要求消息传递基架构和接收应用程序相互协作。当发送者希望按发送顺序提供消息排序时Q在接收者一方却按接攉序提供消息排序的情况是依ơ传送的一U不正确实施——注意到q一Ҏ(gu)很有的。当发送者希望按接收序提供消息序Ӟ在接收者一Ҏ(gu)发送顺序提供消息顺序的情况Q是依次传送的一U正实施?/p>
N路协调协议的某些族需要一个指定的协调者来引导一个工作单元通过一pd合作服务Q一个例子是zd必须在不希望被同时连接的服务之间协调。只要每个参与者和协调者在某一时刻通信Q协调就可能发生Q结果就可能达成一致。Web服务架构为指定的协调者定义了某些单操作?/p>
WS-Coordination规范定义了一个可扩展的协调框架来支持需要显式协调者的情况。该协议引入了一个称为协调上下文QCoordination ContextQ的SOAP头块Q用以唯一地识别联合工作中要着手进行的部分。ؓ(f)了启动工作的接合部分QW(xu)eb服务?x)向一个或多个目标服务发送协调上下文。收到协调上下文后,接收Ҏ(gu)务会(x)得到提示Q说有联合协作请求提出。协调上下文中包含了_的信息,h接收者可以利用这些信息来定是否参与该工作。协调上下文中包含的切信息Ҏ(gu)被请求工作的U类的不同而变化?/p>
协调cd集是可扩充的。只要参与该联合工作的每个服务对所需行ؓ(f)都有个一般的了解Q新cd可以通过实施来定义。例如,原子事务是Web服务架构中已l定义了的几个初始基协调cd之一。如果被h的协调类型被理解q被接受QW(xu)eb服务׃(x)使用WS-Coordination注册协议来通知协调者ƈ参与该联合工作。协调上下文中包含了协调者的一个端点引用和可能行ؓ(f)的可选标识符。注册操作指定该多方参与的Web服务所支持的行为。一旦注册消息发送到协调者,W(xu)eb服务׃(x)依照它们所预订的协议参与该工作。注册是协调框架中的关键操作Q它允许意欲协同配合以完成工作的共同单元的不同W(xu)eb服务怺q接在一赗?/p>
WS-AtomicTransaction为Web服务指定了传l的ACID事务Qƈ为原子事务协调类型定义了3个协议:(x)完成协议QCompletion ProtocolQ和两阶D|交协议(Two-Phase Commit ProtocolQ的两个变体。完成协议用于启动提交处理。ؓ(f)完成而注册的Web服务能够通知指定的协调者何时开始提交处理。该协议q详l说明了用于通知启动者事务最l结果的消息。不q,该协议不要求协调者确保启动者对l果q行处理。相反,W(xu)S-AtomicTransaction中的其他行ؓ(f)则要求协调者确保参与者对协调消息q行处理?/p>
两阶D|交(2PCQ协议ؓ(f)所有已注册的参与者提供了一个公q提交或中止决定,保了所有参与者都能得到最l结果通知。顾名思义Q它使用两轮通知来完成该事务。该协议的两个变体是Q易?PCQVolatile 2PCQ和持久2PCQDurable 2PCQ。这两个协议在线上用相同的消息Q对应于Prepare、Commit和Abort操作Q,但易?PC没有持久性要求。易?PC协议供管理易p源的参与者用,如缓存管理器或窗口管理器。这些参与者在W一轮通知中不与协调者发生联p,且不需要第二轮的通知。持?PC协议供管理数据库和文件等持久资源的参与者用。当某一提交处理已经启动Ӟ在所有易?PC参与者被联系q之后这些参与者会(x)W一ơ被联系。这使缓存能够被h。持?PC参与者需要完整的两轮通知来实现协调者所要求的全有或全无行ؓ(f)以及(qing)完成该事务。这些行为最适合于可以在整个事务期内持有资源Q且该事务通常为非常短暂的事务的情c(din)该协议保证在正常处理的情况下,协调者提供第一阶段l果的同时将联系所有参与者。对于完成时间预计将比较长的事务Q或当资源(如锁Q无法持有时Q其他协调协议就?x)定义替换行为?/p>
WS-AtomicTransaction中定义了若干{略断言Q这些策略断a使用WS-Policy中定义的Ҏ(gu)来表C?/p>
构徏分布式系l时被证明非常有用的一U模式是使用事务持久队列来提供存储{发异步消息传送。在q种模式下,原子事务被用于每一个传输端炏V在发送端Q发送应用程序以原子事务方式消息发送给一个持久队列,此时应用E序和队列管理器都用WS-AtomicTransaction来进行协调。只有在处理消息时不发生错误Q消息才被认为成功发送至该队列。接下来Q发送队列和接收队列之间消息的传送由队列子系l来接管。该传输步骤可以在消息置入发送队列之后的某一时刻完成。此外,发送队列的位置无需与发出消息的应用E序的位|一致。与此类|从接攉列检索消息的应用E序也用原子事务来执行cM操作。也是_(d)只有不出现处理错误时消息才能从队列中U除?/p>
WS-BusinessActivity行时间长的事务指定了两个协议。WS-BusinessActivity规范在事务提交之前ƈ不锁定资源,而是Z补偿操作。底层事务模型是所谓的开攑ֵ套事务。这些协议系l化地说明了松耦合服务如何对已l完成某一联合d达成一致意见。在其中的一个协议中Q协调者显式地通知参与者没有更多的工作正在以联合Q务的名义被请求。在另一个协议中Q该参与者就是通知协调者以联合d名义出现的工作已l完成的参与者。用补偿操作可以在不锁定这些操作的情况下完成试验性操作。不出于何故,只要pȝ惌撤消已完成的试验性操作结果,p启动补偿操作。WS-AtomicTransaction和W(xu)S-BusinessActivity都利用WS-Coordination来管理Web服务之间的协作?/p>
三方握手
三方握手q接的徏立和解除协议是不需要指定协调者服务的协调协议的一个例子。ؓ(f)了徏立连接,发送者要向接收者发送一个请求。该h建立一个会(x)话。如果该h被接受,接收者就?x)发Z条确认消息,对该h作出U极响应。发送者然后再发送一条消息,作ؓ(f)对该认消息的确认,从而证明双斚w知道Ҏ(gu)已经建立了一个会(x)话?/p>
解除协议cM。一方向另一方发送一个会(x)话解除请求。接收者以对解除消息的认消息作ؓ(f)响应。接收到该确认消息之后,发出解除消息的一斚w过再对该确认消息发送一条确认消息结束消息交换?/p>
本节介绍提供Web服务架构中的服务资源枚D、其状态管理和事g通知的规范。这些规范基于WS-Enumeration、WS-Transfer和W(xu)S-Eventing?/p>
很多情况所要求的数据交换都使用不只一对的h/响应消息。需要这些更长时间数据交换的应用cd包括数据库查询、数据流、命名空间等信息的遍历和枚D列表。特别是枚DQ它是通过建立数据源和h者之间的?x)话来实现的。会(x)话中接连不断的消息用于传送正在被索的元素的集合。对于该服务用于l织要生成的项的方法不作假设。在正常处理的情况下Q枚丑ֺ在会(x)话结束前生成所有底层数据?/p>
WS-Enumeration指定了用于徏立枚举会(x)话和索数据序列的协议。枚丑֍议允许数据源向正在用的服务提供一个叫做枚举上下文的会(x)话抽象。该上下文通过一个数据项序列来表C逻辑光标。然后,h者将该枚举上下文用于一个或多个SOAP消息的某一区间以请求数据。枚举数据表CZؓ(f)XML Infoset。该规范q允许数据源提供一U自定义机制来开始新的枚举。既然枚举会(x)话可能需要若q个消息交换Q那么会(x)话状态必M持稳定?/p>
关于q代q度的状态信息可以由数据源或正在使用的服务在h间维护。WS-Enumeration允许数据源一个请求一个请求地军_哪一方将负责l护下一个请求的状态。这U灵zL实C若干U优化。例如,使服务器能够避免对调用之间的M光标状态进行保存。由于消息潜伏时间对于支持若q个同时枚D的服务来说可能会(x)很长Q不保存状态可能会(x)使必ȝ护的信息总量大大减少。资源受限设备(如移动电(sh)话)上的服务实现可能Ҏ(gu)无法l护M状态信息?/p>
WS-Transfer详细说明了对通过Web服务q行讉K的数据实体进行管理所需的基本操作。要了解WS-Transfer需要介l两个新术语Q工厂(F(tun)actoryQ和资源QResourceQ。工厂是能够从其XML表示形式创徏资源的Web服务。WS-Transfer引入了用于创建、更新、检索和删除资源的操作。应当注意,对于资源状态维护,宿主服务器最多也只能做到力而ؓ(f)。当客户端获知服务器接受了创建或更新某一资源的请求时Q它可以适当地预期资源目前在的确定位|,q具有确定了的表CŞ式,但这q不是一个保证——即使是在没有Q何第三方的情况下。服务器可能?x)更?gu)一资源的表CŞ式,可能?x)彻底删除某一资源Q也可能?x)恢复已l删除的某一资源。这U保证的~Z与Web提供的松耦合模型一致。如果需要,服务可以提供非Web服务架构所必需的附加保证?/p>
WS-Transfer的创建、更新和删除操作扩展了WS-MetadataExchange中的只读操作功能。检索操作与WS-MetadataExchange中的Get操作完全相同。Createh发送给工厂。然后,工厂创徏被请求的资源q确定其初始表示形式。工厂被假定与所创徏的资源不同。新资源被分配给一个在响应消息中返回的Q由服务军_的端点引用。Put操作通过提供一U替换表CŞ式来更新资源。资源表CŞ式的一ơ性快照与WS-MetadataExchange中的Get操作一P也可以通过WS-Transfer中的Get操作来检索。Delete操作成功后,资源无法再通过端点引用来用。这4个元数据理操作构成了Web服务中状态管理的构徏基础?/p>
在由需要相互通信的服务构成的pȝ中,可能?x)用异步消息传递。在很多情况下,׃个服务生成的信息也是其他服务所需要的。由于~性差Q轮询往往不是获得q种信息的有效方法;通过|络发送的不必要的消息太多了。相反,该架构需要一U当事g发生时发出显式通知的机制。更重要的要求是源服务和用户服务的绑定必dq行时动态完成。ؓ(f)此,W(xu)eb服务架构提供了一个轻量事g协议?/p>
WS-Eventing详细说明了实C?个实体交互的机制Q订戗订阅管理器、事件源和事件接收。这使某一Web服务在作Z个订h能够登记它对另一个Web服务Q事件源Q所提供的特定事件的兴趣。这U注册叫做订阅。WS-Eventing定义了某一服务可以提供的支持订阅创建和理的操作。当事g源判定有事g发生Ӟ它就?x)将此信息提供给订阅理器。订阅管理器然后可以该事g传送给所有匹配的订阅Q这cM于传l的发布/订阅事g通知pȝ中的发布主题。Web服务架构提供了主题定义、组l和发现方式的全面灵zL;它ؓ(f)在很多不同的应用场合中可能会(x)用到的订阅提供了一个通用的管理基架构。也可以订阅出租的资源,但最l都必须收回。用于收回资源的主要机制是各个订阅的到期旉。查询订阅状态同样也有一U机Ӟ帮助订户理其若q订阅事(包括l订、通知和取消订阅的hQ的附加操作规范中也有详l说明。当ӞM服务都可以随时自由地l止订阅Q这与所有Web服务的自d则一致。订阅终止消息可供事件源通知订户订阅l止q早?/p>
虽然Z事g的异步消息的一般模式很常见Q但不同的应用通常都要求用不同的事g传送机制。例如,在某些情况下单异步消息可能是最佳选择Q但如果事g接收能够通过轮询控制消息和消息到达旉Q则其他情况可能?x)更适用。当接收无法从源头到辄的地Ӟ如接收有防火墙阻拦的情况下,轮询也是必要的。WS-Eventing中所引入的传送模式概念就是用来支持这些要求的。传送模式被用作一个扩展点Q以便ؓ(f)订户、事件接收和事g源徏立定制的传送机制提供一U手Dc(din)下q管理规范利用了q种机制?/p>
事g代理可用于聚合或重新分配来自不同来源的通知Q代理还可以用作独立的订阅管理器。这两个Ҏ(gu)都得CWS-Eventing的支持。代理在pȝ中可以扮演若q个重要角色。主题可以按特定的应用类来组l用。代理可以充当通知聚集器,用于整合来自多个来源的事件信息。它们也可以充当qo(h)器,q比用于其自己通知的过滤器所接收的消息要多。这U灵zL是部v健壮而可伸羃的通知pȝ所必需的?/p>
理功能是要讨论的Web服务架构的最后一个方面。这些功能在WS-Management规范中有详细的说明。WS-Management构徏于该架构的若q组件之上,提供了所有系l管理解x案都必需的一个公共操作集。其中包括发现管理资源存在及(qing)其相互导航的能力。个别管理资源(如设|和动态|可以被检索、设|、创建和删除。容器和集合的内容,如大表和日志Q可以被枚D。规范最后定义了事g订阅和特定的理操作。在q些斚wQW(xu)S-Management只详l说明了最低的实现要求。规范还使符合WS-Management的实现可以部|到型讑֤。同Ӟ它还支持向大型数据中心和分布式安装的扩展。此外,各种机制的定义都不依赖于M暗示的数据模型或pȝ健康模型。这U独立性它可以应用到各种各样的Web服务?/p>
WS-Management要求托管资源的引用用带有特定附加信息的端点引用。该信息包含了对该资源提供访问的代理的URL、该资源所属资源类型的唯一标识WURI以及(qing)识别该资源的零个或更多个密钥。这些密钥被假设为名U?值对。该信息是这h到WS-Addressing端点引用的:(x)资源的URL映射到地址属性,资源cd标识W映到一个名为ResourceURIQ在适当的XML命名I间中)的特定引用属性,各密钥分别映到一个名为Key、属性ؓ(f)Name的引用参数。ؓ(f)了满管理服务的消息传递需要,规范为操作定义了3个限定符。这些限定符的SOAP表示位于header元素中。operation timeout指定了一个截止时_(d)之后操作不需要接受服务;locale元素在需要或期望转换底层信息时用;freshness限定W用于请求最新的值ƈ避免q回陈旧数据。对于用WS-Transfer操作的数据访问,W(xu)S-Management指定了另?个限定符。Get操作可用于SummaryPermitted header和NoCache header。如果可用,SummaryPermitted限定W允怼输简略表CŞ式。NoCache限定W要求传输最新数据,止信息~存。对于Put和Create操作QReturnResource限定W要求服务返回资源的新表CŞ式。ReturnResource使资源受限的Web服务能够在更新资源时不保留状态?/p>
WS-ManagementZ仉知定义?个自定义的传送模式:(x)扏V拉和捕莗这些模式都由URI来识别,q些URI在徏立订阅时使用。批传送模式订户能够接收捆绑在一个SOAP消息中的多个事g消息。订户可能还?x)要求捆l某一最大数目的事g、服务收集事件可耗用的最长时_(d)以及(qing)应返回数据的最大量。拉传送模式生成服务的数据能够维护事件的逻辑队列Q以便订戯够按需轮询通知。该轮询是通过使用WS-Enumeration和返回时附带订阅响应消息的枚举上下文来完成的。最后,如果UDP多\q播是一U合适的消息传递方式,捕获传送模式便允许事g源用它。在捕获模式下,事g源可以将光知发送给某一预定义的UDP多\q播地址?/p>
本文介绍了Web服务架构的功能构造块?qing)其底层原理。每个构造块都是依据协议规范来阐q的。我们希望本文所q的功能范围和指导原则保持不变。不q我们也希望架构能够得到扩展Q以支持更多情况。能够支持创新是该架构的基本特征?/p>
已经q行的大量细致入微的工作可以保各种Web服务协议能够不加变动地相互组合;管是一赯计的Q它们仍可以以非常多的组合方式来使用。和功能构造块一P它们的用方式与传统开发框架类伹{必要时Q如对于SOAP附gQ我们已l开发了新的解决Ҏ(gu)Q而且不加变动它们可以很好地用于该架构内。关注组合不是对丰富功能的威慑?/p>
该架构的SOAP消息传递基保证?foundation assures wide reach。SOAP消息传递以一U传输独立的方式支持异步和同步模式。具有更高灵zL的基础架构不存在。ؓ(f)了加快Web服务架构的广泛采用,很多技术合作伙伴都参与了这些规范的制定。与q些重要技术提供程序的合作加快了设备和支持q些在线协议的编E环境的部v。实现广泛覆盖、广泛采用和与规模无关的构造是我们?个核心目标。我们力争确保该架构能够在Q何^C用Q何编E语a来实现。该架构Z消息的和Z协议的特性ؓ(f)此提供了便利。必要时Q如只用WS-Security来支持消息完整性、机密性和w䆾验证Q以?qing)只使用WS-Policy来表C元数据Ӟ我们已经限定了用于提高互操作水^的技术方法的使用领域。理ZԌ只要实现切实遵守该架构的协议规范Q它们就能与其他MWeb服务通信?/p>
zdh者(Active RequestorQ——活动请求者是能够发出如WS-Security和W(xu)S-Trust中所q的Web服务消息的应用程序(可能是Web览器)?/p>
w䆾验证QAuthenticationQ——验证安全凭证的q程?/p>
授权QAuthorizationQ——根据提供的安全凭证授权讉K安全资源的过E?/p>
规范化(CanonicalizationQ——将XML文档转换成符合每一方要求的格式的过E。在{文档和解译签名时使用?/p>
断言QClaimQ——断a是对发送者、服务或其他资源Q如名称、n份、密钥、组、特权、功能等Q所作的陈述?/p>
协调上下文(Coordination ContextQ——一l协调服务要完成的一l工作的唯一标识W?/p>
反序列化QDeserializationQ——从一个八位字节流构徏XML Infoset的过E。它是用于从消息的有U格式创建消息的Infoset 表示形式的方法?/p>
摘要QDigestQ——摘要是八位字节的加密校验和?/p>
域(DomainQ——安全域代表安全理或信ȝ一个单元?/p>
持久的两阶段提交QDurable Two Phase CommitQ——用于文件或数据库等持久资源事务的协议?/p>
有效{略QEffective PolicyQ——有效策略,针对某一l定的策略主题,是附加在包含该策略主题的{略范围上的{略l合?/p>
交换模式QExchange PatternQ——用于服务之间消息交换的模式?/p>
工厂QF(tun)actoryQ——工厂是可以从XML表示形式创徏资源的Web服务?/p>
联盟QF(tun)ederationQ——联盟是已经建立怺信Q的信d的集合。信ȝ别可能变化,但通常都包括n份验证,q可能包括授权?/p>
w䆾映射QIdentity MappingQ——n份映是创徏w䆾属性之间关pȝ一U方法。某些n份提供程序可能会(x)利用w䆾映射?/p>
w䆾提供E序QIPQIdentity ProviderQ——n份提供程序是为最l请求者提供n份验证服务的实体。n份提供程序还为服务提供程序提供数据源验证服务Q这通常是安全性o(h)牌服务的一U扩展)?/p>
消息QMessageQ——消息是可由服务发送或接收的完整数据单元。它是信息交换的独立单元。无Z时消息都?x)包含SOAP信封Qƈ有可能包含附加MTOM中指定的MIME部g、传输协议header?/p>
消息路径QMessage PathQ——遍布在初始源和最l接收者之间的SOAP节点集?/p>
被动h者(Passive RequestorQ——被动请求者是一个用得到普遍支持的HTTPQ如HTTP/1.1Q的HTTP览器?/p>
{略QPolicyQ——策略就是策略选项集?/p>
{略选项QPolicy AlternativeQ——策略选项是{略断言集?/p>
{略断言QPolicy AssertionQ——策略断a表示特定于域的单个要求、功能、其他属性或行ؓ(f)?/p>
{略表达式(Policy ExpressionQ——策略表辑ּ是策略的XML Infoset表示形式Q可以是正规形式Q也可以是等同的压羃形式?/p>
MQPrincipalQ——可以被授予安全权限或可以给出安全性或w䆾断言的Q何系l实体?/p>
协议l合QProtocol CompositionQ——协议组合是在保持技术连贯性的同时l合协议q免Q何非指定功能副作用的能力?/p>
资源QResourceQ——资源是可由端点引用d的Q何实体,在该端点引用中,该实体可以提供其自n的XML表示形式?/p>
安全上下文(Security ContextQ——安全上下文是一个抽象概念,指的是已建立的n份验证状态和可能h与安全有关的附加属性的协商密钥?/p>
安全上下文o(h)牌(Security Context TokenQ——安全上下文令牌QSCTQ是安全上下文抽象概늚有线表示形式Q它使上下文能够被URI命名q和一起用?/p>
安全性o(h)牌(Security TokenQ——安全性o(h)牌用于表CZl断a的集合?/p>
安全性o(h)牌服务(Security Token ServiceQ——安全性o(h)牌服务(STSQ发行安全性o(h)牌的Web服务。更切地说Q它Ҏ(gu)它所信Q的证据来作出断言Qƈ发送给信Q它的M一方(或特定接收者)。ؓ(f)了表明信任,服务需要证据(如签名)Q以证实安全性o(h)牌或安全性o(h)牌集提供的信息。服务本w可以生成o(h)牌,也可以通过它自q信Q陈述依靠某一独立的STS发行安全性o(h)牌(注意Q对于某些安全性o(h)牌格式,q只能是重新发行或联合签名)。这构成了信M理的基础?/p>
序列化(SerializationQ——将XML Infoset表示为八位字节流的过E。它是用于创建消息的有线格式的方法?/p>
服务QServiceQ——通过消息来与其他实体q行交互的Y件实体。注意,服务不需要连接到|络?/p>
{QSignatureQ——签名是通过加密法计算出来Qƈl定到数据的一个倹{而且l过l定Q数据的指定接收者可以用该{来验证数据没有改变ƈ发自消息的签名者,从而提供了消息完整性和w䆾验证。签名的计算和验证可以通过对称或非对称密钥法来进行?/p>
退出(Sign-OutQ——退出是q样一个过E:(x)某主体表明它们将不再使用其o(h)牌且该域中的服务可能?x)破坏该M令牌~存?/p>
单点dQSSOQSingle Sign OnQ——单点登录是对n份验证序列的一U优化,旨在消除在请求者n上进行的反复操作负担。ؓ(f)了便于进行SSOQ称n份提供程序(Identity ProviderQ的元素能够以请求者的名义充当代理Q将w䆾验证事g的证据提供给h该请求者信息的W三斏V这些n份提供程序(IPQ是受信ȝW三方,既需要得到请求者的信QQ以l护h者的w䆾信息Q因信息的丢失可能会(x)泄露h者n份)Q又需要得到Web服务的信任,W(xu)eb服务可能?x)根据该IP提供的n份信息的完整性提供对重要资源和信息的讉K权?/p>
SOAP中介QSOAP IntermediaryQ——SOAP中介是一个SOAP处理节点Q它既不是原始消息发送者,也不是最l接收者?/p>
对称密钥法QSymmetric Key AlgorithmQ——一U加密算法,其中的消息加密和解密都用相同的密钥?/p>
pȝQSystemQ——实现某一特定功能的服务的集合。与分布式应用程序意思相同?/p>
信QQTrustQ——信任表CZ个实体愿意依靠另一个实体来执行一l操作,对一l主题、范围作Zl断a?/p>
信Q域(Trust DomainQ——信d是一个得到有效管理的安全I间Q在其中Q请求的来源和目标可以确定来自某一来源的特定凭证集是否W合该目标的相关安全{略QƈҎ(gu)达成一致。目标可以将信Q军_延期至第三方的加入(如果q已被确立ؓ(f)一致意见的一部分Q,从而将受信ȝW三方包括在信Q域中?/p>
易失的两阶段提交QVolatile Two Phase CommitQ——用于缓存或H口理器等易失资源事务的协议?/p>
Web服务QWeb ServiceQ——Web服务是一U可重复使用的Y件组Ӟ它依据XML、SOAP和其他业界公认的标准通过|络实现交互式的消息交换?/p>
XML文档可以包含11cM息项。下面,我们列出q详l说明了SOAP所支持的信息项Qƈ要介l了其他的信息项。SOAP支持6cM息项Q?/p>
SOAP不支持但出现在XML Infoset初始定义中的5cM息项是:(x)处理指o(h)(Processing Instruction)、文档类型声?Document Type Declaration)、未扩展的实体引?Unexpanded Entity Reference)、未解析实体(Unparsed Entity)和表C法(Notation)?/p>
对分布式pȝ的攻d以分q个斚w。它们可以指向系l中的一个或多个LQ或指向它们之间的通信|\。攻ȝ目的可能是中断操作、获得机密信息或在系l内部执行未授权的操作。它们可能会(x)dpȝ中所使用的加密技术或以安全性ؓ(f)中心的其他技术,也可能企N过d下面的系l和|络层或上面的应用层来旁路它们。以下是一个简短的不全面的安全性攻ȝ?qing)针?gu)cLȝ标准对策的列表,它们是按上述的几个方面组l编排的Q?/p>
当指向加密层ӞDoS通常?x)尽力迫使主机反复执行特定n份验证或密钥交换协议所需的计代价高昂的公钥操作。对抗这cLȝ典型防M措施是gq公钥操作,直到对话者的合法性能够通过p较少的方法(如对U加密或“谜语”)来验证时为止。DoS对底层网l层或顶层应用层的攻dNԌ特别是在d者控制着大量资源且通信量处于正帔R信量难以觉察的情况下。要实现|络基础架构的部|Ԍ通常必须通过漏斗方式通信量降至一个可理水^?/p>
q些d可能?x)利用主Y件中的薄q来获得对L的控制。适当的安全性管理,如安装补丁、配|防火墙以及(qing)削减暴露应用E序的特权,是比较常用的对策。另一cLd用系l或应用E序中的qQ如讄不正的{略或应用程序逻辑错误Q除了一般的L泄密以外Q它们还?x)考虑机密性或授权泄密。恰当的安全性策略管理和周密的应用程序设计是对付q类d的唯一防M措施。在“电(sh)子欺骗”攻MQ攻击者企N过冒用某一l过授权的其他方的n份ƈ做出相应的行为来获得对各U操作的授权。只要主机和l授权方切实保护好n份验证密码,q正用安全的w䆾验证协议Q就可以预防?sh)子ƺ骗?/p>
和对L|络层的d一Pq些d实也只能用网l基架构Ҏ(gu)来应寏V?/p>
明文通信的直接监听可以通过加密来阻止。通过_强大的加密算法和_长的密钥Q密码分析攻M可以被扼制?/p>
d者企囑ְ消息插入?x)话的“消息伪造攻几Z和d者修改会(x)话中发送的消息的消息,变更d都可以通过包含消息w䆾验证的消息安全性协议来L。攻击者将以前发送的Q因而通过了正的w䆾验证Q消息插入会(x)话的消息重放Q攻d以通过序号或时间戳和消息缓存的l合来检和L?br />