`

SOAP应用模式: 基础与安全

    博客分类:
  • SOA
阅读更多

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-->

请求/响应模式

在电子商务应用中,通讯的双方常常通过交换商务文档来进行电子商务。发送方会将一个或多个文档包装在一个请求消息中,然后发送给接受方。接收方将会处理该消息的内容然后响应发送方。发送方文档的一些例子可能包括订单请求,或是制造信息,又或是病人的保健记录等。而接受方的响应的一些例子可能包括订单确认、更改控制信息以及合同确认等。

请求/响应模式需要"请求/响应"消息特性来实现。当一些商业应用被调用后,一个包含一些商业文档的请求将从SOAP发送者发向 SOAP接收者。而位于SOAP接收者端的商业应用将处理这个请求并生成响应,这个响应将被回送给发出该请求的SOAP发送者。下面我们将描述两个可互相替换的解决方案,这两个解决方案都将依赖底层传输协议的特性。无论是那个解决方案,SOAP发送者都被告知了请求消息传输的状态(成功或失败)。

Figure 1. 使用底层传输的请求/响应模式

如果底层传输协议直接支持请求及其响应的关联性(即底层协议支持请求/相应机制),那么具体的实现机制如图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消息示例:

<env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope">
   <env:Header>
     <n:MsgHeader xmlns:n="http://example.org/requestresponse">
       <n:MessageId>uuid:09233523-345b-4351-b623-5dsf35sgs5d6
         </n:MessageId>
     </n:MsgHeader>
   </env:Header>
   <env:Body>
     ……………
   </env:Body>
 </env:Envelope>




<env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope">
   <env:Header>
     <n:MsgHeader xmlns:n="http://example.org/requestresponse">
       <n:MessageId>uuid:09233523-567b-2891-b623-9dke28yod7m9
         </n:MessageId>
       <n:ResponseTo>uuid:09233523-345b-4351-b623-5dsf35sgs5d6
         </n:ResponseTo>
     </n:MsgHeader>
   </env:Header>
   <env:Body>
     ……………
   </env:Body>
 </env:Envelope>






回页首



使用加密机制

当我们对消息传输的安全性有所要求的时候,最直接的方法就是使用加密机制的请求模式。在使用加密机制的请求模式下,发送者期望与接收者按照彼此达成一致的加密机制来交换数据,也就是说他们使用同样的加密解密算法。需要发送的数据由初始发送者应用加密并通过SOAP被发送给接收者。当数据原封不动地到达接收应用时,接收者按照预先达成一致的解密算法进行解密。

在这个模式下,两个应用程序希望以SOAP消息中非透明的消息体的形式来交换加密后的数据,也就是说在SOAP消息这层,数据已经是密文的,对于SOAP层而言,其并不知道数据是明文还是密文,加密解密的操作完全在SOAP层之上完成。该模式对于SOAP消息层没有额外的需求。

下面是一个待加密的纯文本SOAP消息:

<env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope">
   <env:Body>
     <m:GetLastTradePrice xmln:m="some-URI">
       <m:symbol>IBM</m:symbol>
     </m:GetLastTradePrice>
   </env:Body>
 </env:Envelope>


下面则是这个纯文本SOAP消息的加密后的版本。Body条目<m:GetLastTradePrice>被对称加密方法加密了,对称密钥是由键名"Symmetric Key"所标识的,同时这个Body条目加密后将以<xenc:EncryptedData>元素的形式出现,这个加密后的元素带有一个 id:"encrypted-body-entry"。为了传送这一加密数据,<SOAP-SEC:Encryption> SOAP Header条目被添加到SOAP Header中。需要注意的是,SOAP Header条目中的<SOAP-SEC:EncryptedDataList>元素包含了一个对<xenc:EncryptedData>元素的引用。而被用于加密的对称密钥被保存在SOAP Header条目中的<xenc:EncryptedKey>元素内,出现的形式是加密后的密文密钥形式,也就是说,这个密钥是使用RSA公钥加密的(这是一个常用的加密模型,文档数据使用诸如DES的对称加密算法加密,而加密的对称密钥则使用非对称的RSA加密算法加密)。

<SOAP-ENV:Envelope
        xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header>
    <SOAP-SEC:Encryption
        xmlns:SOAP-SEC="http://schemas.xmlsoap.org/soap/security/2000-12"
        SOAP-ENV:actor="some-URI"
        SOAP-ENV:mustUnderstand="1">
      <SOAP-SEC:EncryptedDataList>
        <SOAP-SEC:EncryptedDataReference URI="#encrypted-body-entry"/>
      </SOAP-SEC:EncryptedDataList>
      <xenc:EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
           Id="EK"
           CarriedKeyName="Symmetric Key"
           Recipient="John Smith">
        <xenc:EncryptionMethod
             Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
        <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
          <ds:KeyName>John Smith's RSA Key</ds:KeyName>
        </ds:KeyInfo>
        <xenc:CipherData>
          <xenc:CipherValue>加密后的对称密钥数据......</xenc:CipherValue>
        </xenc:CipherData>
        <xenc:ReferenceList> 
          <xenc:DataReference URI="#encrypted-body-entry"/>
        </xenc:ReferenceList>
      </xenc:EncryptedKey>
    </SOAP-SEC:Encryption>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
           Id="encrypted-body-entry"
           Type="http://www.w3.org/2001/04/xmlenc#Element">
      <xenc:EncryptionMethod
           Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">  
        <ds:RetrievalMethod
              URI="#EK"
              Type="http://www.w3.org/2001/04/xmlenc#EncryptedKey"/>
        <ds:KeyName>Symmetric Key</ds:KeyName>
      </ds:KeyInfo>
      <xenc:CipherData>
        <xenc:CipherValue>加密后的SOAP Body条目......</xenc:CipherValue>
      </xenc:CipherData>
    </xenc:EncryptedData>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>






回页首



选择性的消息头和消息负载加密

为了使加密处理更为灵活并具可扩展性,我们可以将加密操作挪到SOAP层之中来实现。在选择性的消息头和消息负载(消息体)加密模式下,参与消息交换的两个交易伙伴可以就加密签名以及校验各自的消息头、路由Header条目以及消息负载的方法达成一致。发送者或是源应用程序实施对消息负载的签名。然后发送消息的处理器实施对消息头的签名。在消息交换过程中,路由消息头可以被添加到SOAP消息头里去。而路由消息头可以被一个消息服务处理器实施签名。

Figure 3. 选择性的消息头和消息负载加密

在使用加密机制的请求模式中,两个应用程序通过加密的消息负载进行通讯。这些被加密后的消息负载将使得SOAP处理层无法对其进行处理。而在这个模式下,对消息头或者消息负载进行签名和/或加密则是SOAP处理层的责任。在图3 中,我们展示了加密约定是如何作用位于SOAP发送者的消息签名处理器以及相应的位于SOAP接收者的消息校验处理器的。而一个额外的消息路由SOAP Header条目也可以是SOAP消息的一部分,如果应消息交换的安全性的需要,这个SOAP Header条目也可以被签名和校验。

关于消息示例,大家则可以参考前面的例子自行给出。



参考资料


原文:http://www.ibm.com/developerworks/cn/xml/x-soapapp/part1/

分享到:
评论

相关推荐

    分布式Java应用基础与实践[带目录书签]

    分布式Java应用基础与实践是Java开发中的重要领域,它涵盖了多台计算机之间的协作,通过网络进行数据交换和服务调用,以实现大规模系统的高效运行。在Java世界中,分布式技术广泛应用于构建可扩展、高可用的互联网...

    Programming Web Services with SOAP

    ### Web 服务编程基础:利用 SOAP 进行开发 #### Web 服务简介 Web 服务是一种基于网络的应用程序...通过学习这些基础知识,开发者可以掌握如何使用 SOAP 创建高效且安全的 Web 服务,从而满足各种企业级应用的需求。

    8 SOAP模式在临床药师培训中的应用实践 [兼容模式].pdf

    ### 8 SOAP模式在临床药师培训中的应用实践 ...通过SOAP模式的应用,临床药师不仅能够准确记录患者的病情变化,还能在此基础上进行科学的评估和合理的治疗规划,从而提高临床工作效率,保障患者安全。

    PHP的soapDemo

    SOAP(简单对象访问协议)则是一种轻量级的消息协议,用于交换结构化的、基于XML的数据。当PHP与SOAP结合时,我们可以创建强大的Web...这个项目提供了一个实际操作的起点,你可以在此基础上扩展和定制自己的SOAP应用。

    SOAP很好的学习资料

    ### SOAP详解:从基础知识到应用实践 #### 一、什么是SOAP? SOAP,即Simple Object Access Protocol,简单对象访问协议,是一种轻量级的协议,旨在为分散式、分布式环境中交换结构化信息提供一种机制。根据W3C的...

    使用Ajax调用SOAP Web服务1:构建Web服务客户机

    本文提到的Web Services JavaScript Library就是为了弥补这种差异,它扩展了Ajax设计模式,使其能够处理SOAP消息,从而在JavaScript环境中调用Web服务。 调用SOAP Web服务的过程通常涉及以下步骤: 1. 创建`...

    soap协议规范

    3. **SOAP RPC表示**:这部分规定了如何表示远程过程调用和响应,使SOAP可以支持远程函数调用模式。 这三个部分虽然作为整体被描述,但在功能上是相互独立的,提供了高度的灵活性和可扩展性。 #### 三、SOAP的设计...

    一个支持SOAP11和12规范的PHP客户端

    8. **SOAP安全**: 包括认证、授权和加密,确保数据在传输过程中的安全性。 9. **REST API交互**: 如果客户端也支持REST,那么理解REST的基本原则,如CRUD操作、HTTP方法、URI设计和状态码等也很重要。 为了有效地...

    (10):安全基础-WCF课件

    ### WCF安全基础知识点 #### 一、WCF与面向服务的应用程序 **WCF (Windows Communication Foundation)** 是一种框架,用于构建面向服务的应用程序。它提供了统一的编程模型、一组标准系统服务和一系列可互操作的...

    programming web service with soap

    本书是一本全面介绍如何使用SOAP(简单对象访问协议)、WSDL(Web服务描述语言)和UDDI(统一描述、发现与集成)标准来构建分布式Web应用的专业指南。 #### 二、Web服务概述 - **2.1 什么是Web服务?** - Web服务...

    SOAP Version 1.2中文手冊

    为了评估SOAP 1.1与这些新需求的兼容性,工作组还创建了一个抽象模型和术语词汇表,以及一个记录与SOAP/1.1规范相关问题和关注点的问题列表。 在分布式环境中,SOAP 1.2因其基于XML的特性,能够跨平台、跨语言地...

    构建WCF面向服务的应用程序系列课程(7):消息模式.zip

    1. **消息模式基础**: - **消息模型**:WCF中的消息模式允许服务以独立于传输协议和数据编码的方式处理消息。这意味着开发者可以专注于业务逻辑,而无需关心底层通信细节。 - **SOAP消息**:WCF主要基于SOAP...

    SOAPWeb Service 开发

    - 通过本书的学习,开发者可以深入了解SOAP Web Service的工作原理,掌握其实现方法,为构建高效、可靠的分布式应用打下坚实的基础。 - 随着技术的发展,虽然Web Service的形式可能发生变化,但其核心思想和设计原则...

    《实战Delphi6/Kylix2/SOAP/Web Service程序设计篇》(

    Web Service,是一种基于网络的、松散耦合的服务架构模式,它允许不同的应用程序之间交换数据和服务,无需知道对方的内部实现细节。通过XML-RPC(XML Remote Procedure Call)或SOAP作为通信手段,Web Service使得...

    SOAP和WEB服务接口对云计算系统的安全性影响1

    然而,这种便利性也带来了新的安全挑战,因为Web服务固有的脆弱性可能使云计算系统面临与Web服务相同的风险。 首先,我们需要理解云计算和Web服务的基础概念。云计算是一种基于互联网的计算方式,用户无需在本地...

    《PHP5高级应用开发实践》 (高清中文PDF版)

    - 设计模式运用:单例模式、工厂模式等常见模式的应用场景分析。 - 反射机制详解:运行时获取类信息并操作对象的方法。 - **实战案例分析** - MVC框架搭建:利用OOP特性构建可维护性强的Web应用。 - ORM技术实践...

    SOA SOAP论文

    **服务导向架构(SOA)与简单对象访问协议(SOAP)** 服务导向架构(Service-Oriented Architecture,简称SOA)是一种设计模式,它强调通过松散耦合的服务来构建可复用、灵活且互操作的系统。在SOA中,服务是业务...

    C#网络应用编程(第3版)源代码

    6. **Web服务和SOAP**:学习创建和消费SOAP Web服务,理解WSDL(Web服务描述语言)和XML Schema,以及如何使用Wsdl.exe工具生成客户端代理类。 7. **HTTPS安全通信**:了解SSL/TLS协议,学习如何在C#中使用...

Global site tag (gtag.js) - Google Analytics