SOAP应用模式: 基础与安全
2002 年 8 月 01 日
SOAP应用模式是一个由四篇文章组成的系列,主要讨论的是如何将SOAP应用到各种各样的应用环境中去。本文是系列的第一篇,从大多数应用的基本消息交换模式:请求/响应模式出发,探讨如何通过消息加密的方式,实现安全消息传输。<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
如果底层传输协议直接支持请求及其响应的关联性(即底层协议支持请求/相应机制),那么具体的实现机制如图1所示。同步HTTP POST是这样一个底层传输协议的例子。这样一种实现机制将使用某种SOAP绑定,例如SOAP HTTP绑定。由SOAP发送者发送的作为请求的商业文档将被插入到请求消息中,成为请求消息的有效负载(消息体)。而当接收到该请求后,处理应用将产生一个将作为响应消息的有效负载并将被返回的文档,同时在响应消息中会包含合适的状态码。无论因为何种原因,如果请求消息没有被接收到,或者没有被期望的商业应用所处理,那么同样,合适的状态消息也将被底层传输层所生成并报告给SOAP发送者。
Figure 2. 使用SOAP Header的请求/响应模式
如果底层传输协议不支持请求/响应模型,那么按照如图2所示的机制将是一个合适的解决方案。这种底层传输协议的一个例子是单向的队列中间件。在这种情况下,消息标识和消息关联是通过SOAP Header来提供的。在生成请求SOAP消息时,消息标识处理器需要生成一个唯一的消息标识,并将它插入到一个SOAP Header中。这个消息标识作为SOAP请求消息的一个组成部分由SOAP应用A发送,并被SOAP应用B接收。请求消息被商业应用处理,同时该商业应用装配了响应消息。响应消息中同样包含了一个特别的SOAP Header,这个SOAP Header是由消息关联性处理器生成的,它负责将响应消息与其相关的请求消息设置连接语义。
下面的代码是该模式下的一组请求/响应SOAP消息示例:
回页首
在使用加密机制的请求模式中,两个应用程序通过加密的消息负载进行通讯。这些被加密后的消息负载将使得SOAP处理层无法对其进行处理。而在这个模式下,对消息头或者消息负载进行签名和/或加密则是SOAP处理层的责任。在图3 中,我们展示了加密约定是如何作用位于SOAP发送者的消息签名处理器以及相应的位于SOAP接收者的消息校验处理器的。而一个额外的消息路由SOAP Header条目也可以是SOAP消息的一部分,如果应消息交换的安全性的需要,这个SOAP Header条目也可以被签名和校验。
关于消息示例,大家则可以参考前面的例子自行给出。
参考资料
SOAP Version 1.2, W3C Working Draft 9 July 2001
原文:http://www.ibm.com/developerworks/cn/xml/x-soapapp/part1/