当前位置: 首页 > 答疑 > 正文

soap协议 soap协议篇1

作者:admin 发布时间:2023-07-30 22:31:16 分类:答疑 浏览:58


  soap协议篇1

  关键词:J2MESOAPXML嵌入式系统

  1引言

  J2ME作为嵌入式系统应用平台得到了迅速的发展,JAVA语言固有的平台无关性使得基于J2ME平台的嵌入式应用系统具有广阔的前景。受限于嵌入式设备及消费类电器硬件条件的限制,J2ME平台提供的功能有限,如何能够在有限的资源下拓展J2ME的功能,使得J2ME平台能够处理SOAP协议是本文研究的重点。

  目前企业应用正在向面向weB服务的SOA架构转变,嵌入式系统与企业应用系统的连接目前还处于TCP/IP协议、HTTP协议等比较初级的阶段。随着企业应用系统提供的WEB服务日益广泛和成熟,需要J2ME平台提供处理SOAP协议的需求也越来越多。

  SOA架构是目前企业应用系统广泛部署的架构,实现SOA的关键问题之一就是对SOAP协议的支持。本文分析了在J2ME平台中实现SOAP协议处理遇到的问题,提出了相应的解决方案。

  2j2ME介绍[1][2][3]

  J2ME(Java2PlatformMicroEdition)是为无线电子市场所设计的JAVA平台,包括JVM规范和API规范。J2ME定义了一套类库和虚拟机技术,这些技术可以使用户、服务提供商和设备制造商通过物理(有线)连接或无线连接,按照需要随时使用丰富的应用程序。J2ME同时提供了Java语言一贯的跨平台性和安全性。

  为了支持用户和嵌入式市场提出的灵活性和可定制性要求,J2ME被设计得更加模块化和可缩放化。J2ME在设备原有的操作系统上建造了3层软件来实现这种要求:

  1.JVM层:这层基于宿主操作系统,按照某一种J2ME的配置实现了JVM。

  2.配置层:这层对于用户可见度要低一些,但对简表层非常重要。它针对不同市场的需求,定义了Java虚拟机的最小功能集合和Java类库的最小集合。在J2ME设备中,JVM与配置层紧密相连,它们体现了每一类设备的基本功能。

  3.简表层:这层对于用户和应用程序提供者来说是最常见的。它针对特定市场的需求,定义了Java虚拟机的最小功能集合和Java类库的最小集合。

  J2ME组件都围绕一个中心,这些中心被称为configuration(配置),它们中间的每一个都是用于消费电子和嵌入设备的特别的类。目前配置分为CLDC和CDC两种。

  Connectedlimiteddeviceconfiguration(有限连接设备配置,简称CLDC)定义支持“devicesthatyouholdinyourhand(握在手中的设备)”的应用程序接口和技术,这类设备的代表是PDA。Connecteddeviceconfiguration(连接设备配置CDC)定义支持“devicesthatyouplugintoplugintothewall(插入墙的设备)”的应用程序接口和技术,这类设备的代表是机顶盒。

  这两种配置不同的地方就在于它们应用于的装置的能力,CLDC设备的处理器能力有限(与台式机系统比较),并且存储器大小一般也只在128KB到512KB之间。CDC系统不同,它可能有32位或64位处理器,以及有限的存储容量,不过它的下限也得超过512K。

  上图解释配置和简表的体系结构。J2ME的体系结构被横向地分成三层,纵向分成两部分。配置包括一个控制配置核心类的虚拟机,具体的简表位于每个配置之上。

  简表为相同消费电子设备的不同的生产商提供了标准化的Java类库,现在五个已知简表已经有了规范:

  Mobileinformationdevicesprofile(MIDP)移动电话和呼叫器CLDC

  PersonaldigitalassistantprofilePalm和Handspring的PDA设备CLDC

  Foundationprofile用于所有不需要GUI的CDC设备的标准简表CDC

  Personalprofile替代PersonalJava的Foundation完善的简表CDC

  RMIprofile提供RMI的Foundation完善的简表CDC

  3SOAP协议介绍[4]

  SOAP(简单对象访问协议)是一种利用XML编码数据的数据传输协议。它是同类协议中要求最低的一个规范,只定义了协议所要求的最关键的部分,有意地忽略了垃圾收集、对象激活等方面的细节。像TCP/IP协议一样,SOAP协议也包括客户端和服务器两个部分。

  SOAP客户端是一种创建XML文档的程序,该XML文档包含在分布式系统远程调用方法所需的信息。SOAP客户端不是传统意义上的程序,它除了用作普通的桌面应用程序外,还可以是一种Web服务器或基于服务器的应用程序。来自SOAP客户端的消息请求一般是通过HTTP发送的。因而,SOAP文档可以穿过几乎所有的防火墙,从而能跨越不同的平台交换信息。

  SOAP服务器只是用于监听SOAP消息的特殊代码,它可用作SOAP文档的分配器和解释器。外部Web服务可以与基于J2EE技术的应用程序服务器交互,这种应用程序服务器可以处理多种客户端的SOAP请求。

  SOAP定义了数据编码规则,称为基准编码或“Section5(第5节)”编码,它是出自SOAP规范中描述数据编码规则的内容。SOAP编码可以简短地描述成简单值或复合值的集合。简单值可以是简单类型,如整型、浮点型和字符型,或者是XML架构规范第2部中定义的内置类型,包括各种数据类型,如字节型数组和枚举。复合值包括结构、数组和XML架构制定组定义的复杂类型。

  SOAP在标准化消息格式环境中,可以做所有它能完成的工作。消息的主体部分是“text/xml”形式的MIME类型,并且包含一个SOAP封套。该封套是一个XML文档。封套包含了报头(可选的)和报文(必须有的)。封套的报文部分总是用于最终接收的消息,而报头项目可以确定执行中间处理的目标节点。附件、二进制数字及其他项目可以附加到报文上。

  SOAP提供了一种让客户端指定哪个中间处理节点必须处理报头项目的方法。由于报头与SOAP消息的主体内容是互不相关的,所以可用它们给消息添加信息,而不会影响对消息报文的处理。

  4SOAP协议在J2ME平台中的实现

  如何真正地将移动设备融入到WebServices中去呢?这就需要使得PDA、手机等成为WebServices的客户端,因此这些设备至少应该具有处理XML信息的能力。在J2ME平台中实现SOAP客户端的功能,使得嵌入式设备能够连接企业的WEB服务是企业应用中比较常见的需求。J2ME的基本类库中没有提供SOAP的支持,所以需要在J2ME平台中开发实现SOAP的处理功能。

  实现SOAP协议客户端的关键问题分为两个方面:J2ME不同配置的数据类型不一样,导致与SOAP协议封装的数据类型不匹配;J2ME平台没有提供对XML文件进行处理的功能。

  针对第一个问题,需要注意只能使用基本类型,对不匹配的数据类型采用使用基本类型复合的方式进行处理。针对第二个问题需要在J2ME中扩展对XML文件处理的功能。目前有有两种方法对XML文件进行解析。一种是采用DOM的方式,另外一种是采用SAX的方式。操作DOM是一个与XML相互作用的简单方法,通常这个XML是一棵完整的XML树,被解析成一个存放在存储器中的节点结构,你可以遍历这棵树。它非常简单易用,但是因为整棵树存在于存储器中造成存储器的负担,而对于嵌入式系统来说存储器的资源是有限的,因此这种方法的使用具有一定局限性。第二种方法在捕捉语法分析事件中,每当语法分析程序遇到数据中的特定结构,它就会遍历XML数据,然后把结果发回前面注册的一个事件监听器中。比如说,当语法分析程序遇到一个起始标记,如<html>,那么事件监听器将接收一个事件,通知它这个情况,并且向它传递任何所需的信息。相对DOM方式的处理,SAX方法对存储器的要求比较低,但是效率要比DOM方式低。

  Enhydra的KXML是一个只占很小存储空间的XML语法分析程序,对于J2ME应用程序非常适合。KXML支持DOM语法分析和操作,但是不支持SAX语法分析。取而代之,它使用一种稍微不同的称为“Pull”的分析方法。

  下面是KXML采用DOM的方式处理XML数据的例子:

  1.Documentdoc=newDocument();

  2....

  3.parser=newXmlParser(abc);

  4.doc.parse(parser);

  第一行创建了一个文档对象,保存XML树。第三行从一个名为abc的InputStreamReader中创建一个KXML语法分析程序。第四行传送这个语法分析程序到文档,然后让文档开始分析。XML被递归分析,直到到达文档的结尾。当分析调用退出时,整个文档被装入内存,这时就可以对XML进行操作了。

  1.Elementroot=doc.getRootElement();

  2.intchild_count=root.getChildCount();

  3....

  4.for(inti=0;i<child_count;i++){

  5....

  6.Elementkid=root.getElement(i);

  7.

  8.if(!kid.getName().equals("abc")){

  9.continue;

  10.}

  <abc>元素是根元素的直接子元素,可以遍历根元素的子元素,寻找abc标记,如果子元素不是一个abc标记,则返回。

  1.intaddress_item_count=kid.getChildCount();

  2.

  3.for(intj=0;j<abc_item_count;j++){

  4....

  如果找到了abc子元素,开始遍历它的子元素,并把这些子元素的内容打印出来。

  通过KXML对XML的处理,可以进一步实现对SOAP数据的处理,实现J2ME平台对SOAP协议的支持。

  J2MEWebServices规范(JSR172)的制订给J2ME平台增加两大功能:一是使其能够远程访问基于SOAP/XML的WebServices;二是使其具有解析XML数据的能力。目前JSR172的标准已经制定完成,为了实现这两大功能,JSR172新定义了提供相应功能的两个可选包。这两个包占用内存非常少,XML-RPC部分大概需要25-30KB的空间,而XML解析器则需要35KB左右。

  规范只对JAX-RPC的模型提供支持,也就是说仅支持同步的访问方式,使用J2ME客户端可以向服务器发送RPC请求和获得RPC响应。在JSR172中实现的是SAX模式的解析器。能够解析XML之前首先需要创建SAXParser的实例,

  SAXParserFactoryfactory=SAXParserFactory.newInstance();

  SAXParsersaxParser=factory.newSAXParser();

  接下来要获得XML文件的输入流,并把它作为其中一个参数传递给saxParser的parse方法,

  InputStreamis=this.getClass().getResourceAsStream("phone.xml");

  SaxParser.parse(is,newBasicHandler(this));

  DefaultHandler是SAX2默认的事件处理器基类,用于处理XML解析事件的方法如下:

  startDocument()

  startElement(java.lang.Stringuri,

  java.lang.StringlocalName,java.lang.StringqName,Attributesattributes)

  characters(char[]ch,intstart,intlength)

  endElement(java.lang.Stringuri,

  java.lang.StringlocalName,java.lang.StringqName)

  endDocument()

  默认情况下,DefaultHandler的上述方法什么也不做,因此必须自己扩展DefaultHandler并且覆盖上述的方法。程序中提供了一个BasicHandler用来处理xml文件。classBasicHandlerextendsDefaultHandler在BasicHandler类中有两个成员变量

  privateVectorphones=newVector();

  privateStacktagStack=newStack();

  phones用来存储我们已经解析出来的Phone对象,tagStack则用来存放我们解析到的元素名称,比如sonyericsson,phone,name,colour等。在文档解释结束后,也就是在endDocument()方法内我们把解析的结果显示在手机屏幕上,BasicHandler的几个重要方法如下:

  publicvoidstartDocument()throwsSAXException{}

  publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattributes)

  throwsSAXException{

  System.out.println("theqNameis"+qName);

  if(qName.equals("phone")){

  Phonephone=newPhone();

  phones.addElement(phone);

  }

  tagStack.push(qName);

  System.out.println("thetagstack''''slengthis"+tagStack.size());

  }

  publicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException{

  System.out.println("theendqNameis"+qName);

  tagStack.pop();

  }

  5结束语

  通过扩充J2ME平台对XML数据的处理,完成了J2ME平台对SOAP协议的支持。通过SOAP协议能够使得基于J2ME平台的嵌入式设备无缝的连接到企业现有的应用系统,解决了嵌入式设备数据来源不足的问题,扩展了嵌入式系统的应用范围。本文从处理XML数据出发,深入探讨了在J2ME平台中实现SOAP客户端的各种技术,对于企业应用系统的集成具有一定的推广价值。

  参考文献

  [1]Yuan,MichaelJuntao.EnterpriseJ2ME.PearsonEducation2003

  [2]胡虚怀,杨志,李焕.J2ME移动设备程序设计.清华大学出版社2005

  [3]施铮.J2ME技术参考手册.电子工业出版社2004

  soap协议篇2

  关键词:Web Services;SOAP;签名;加密;

  中图分类号:TP393文献标识码:A文章编号:1009-3044(2011)28-6850-03

  大多数应用系统需要在不同组织机构的异构平台间完成数据收集、传递和处理。面向服务的架构是现代应用系统的基础, Web Services作为面向服务的核心,具有跨平台、松耦合、与实现语言无关等特点,是一种分布式模型技术,被广泛应用于现代应用系统中,不同组织采用Web Services技术对外提供服务。这样,应用系统的安全边界由Intranet扩大到Internet,给各组织机构平台的安全性和消息传递的安全带来了挑战。

  1 Web Services基础和SOAP规范

  1.1 Web Services基础

  Web Services是一组通过标准的Web协议可编程访问的Web组件。其涉及的相关技术主要包括可扩展标记语言XML,简单对象访问协议SOAP,Web服务描述语言WSDL,通用描述、发现与集成UDDI。其中XML是Web Services平台中表示数据的基本格式;SOAP是轻量级的协议,它通过XML文档形式发送和接收消息实现异构平台上的不同系统的相互通信和共享数据;WSDL用来描述Web Services所完成的功能和Web Services所提供的服务;UDDI用来注册、已建立的Web Services [1]。

  一个典型的Web Services调用和返回的消息传递模型如图1[2],服务提供方对外提供接口,隐藏内部实现,服务请求方通过调用接口请求Web Services 服务。

  Web Services中的消息基于XML格式,以SOAP协议封装,可以通过任意支持字节流的协议传送,而由于HTTP协议的通用性,目前大多都将SOAP与HTTP绑定。

  1.2 SOAP 规范[3-4]

  简单对象访问协议(SOAP,全称Simple Object Access Protocol)是一种标准化的通讯规范,以XML形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制。SOAP消息分为四部分:

  1)SOAP信封(Envelope):定义了一个SOAP消息表示框架,包括消息头Header和消息体Body,消息头中定义消息发送和接收者信息以及附加的特性,消息体中包含发送的数据信息。

  2)SOAP编码规则:定义了一组数据序列化的编码规则,定义数据类型。

  3)SOAP RPC:表示远程过程调用和响应的约定。 在SOAP RPC请求和相应中,方法调用被串行化为SOAP编码规则定义的,基于XML的数据类型。

  4)SOAP 绑定:定义SOAP在传输过程中使用特定底层通信协议的约定。

  Web Services使用SOAP进行消息传递,是将每个远程请求串行化为基于XML数据类型,把请求数据和应答数据序列化,附加上消息发送和请求者等信息,以HTTP等协议为底层传输协议。

  2 Web Services安全

  2.1 Web Services安全问题

  Web Services的数据交换是在异构平台间进行,需要跨越不同平台的网络安全边界,在互联网上进行消息传送,易受到数据截取、篡改、非授权访问等威胁。所以,安全问题一直是Web Services亟需解决的,Web Services安全必须是覆盖消息传输的所有的协议层,不能仅考虑孤立的单个协议层。消息传递的安全主要包括四个方面:机密性、完整性、不可抵赖以及授权访问。

  Web Services服务提供方一般使用边界防火墙处理Web Services的消息验证,对访问接口的数据包源地址进行验证,但数据包的源地址是易于伪装,而且由于Web Services在传输层采用HTTP作为传输协议,其内容大多数的防火墙并不检查或者过滤,防火墙的有效性大大降低。

  消息传输层一般采用SSL来对HTTP进行加密,但是通过SSL只能是实现点对点的安全,端对端的安全无法保证[5]。 SOAP是轻量级的基于XML 的协议,本身并不处理安全,并且由于SOAP协议的独立性设计,使得本协议层的安全不能依赖已有的安全协议,例如SSL、TLS、SHTTP和S-MIME。

  但是由于SOAP协议采用XML格式,支持模块化的扩展,所以可以对在SOAP消息框架中定义安全标签,对SOAP头进行扩展,将安全信息放在SOAP报头中[6]。

  2.2 WS-Security[5]

  WS-Security提供了如何将安全令牌证书(security tokens)与SOAP消息关联起来的通用机制,定义了如何利用XMLEncryption 和XML Signature 对SOAP进行加密和签名。WS-Security主要描述以下三种机制,通过其实现消息传输安全的不同方面:

  1)通过对SOAP 签名实现完整性要求和不可抵赖性。

  2)通过对SOAP加密实现机密性要求。

  3)采用安全令牌确认发送者身份,只有授权用户才能进行调用Web Services服务。

  WS-Security支持多种安全令牌,包括用户名安全令牌、x.509证书、Kerberos票据等,对SOAP Header进行语法细节定义,规定在SOAP Header中使用定义安全要素,包括安全令牌和签名,在SOAP Body中对数据加密。相比消息传输层的安全,WS-Security更易扩展,而且实现了端到端的安全。

  3 安全SOAP实现

  以典型的购物网站为例,在用户购买商品时,需要输入用户名和信用卡相关信息,购物网站在向发卡行请求扣款时,调用发卡行的Web Services。这样通过HTTP发送的SOAP消息中包括:

  13423

  4392122109980678

  05/16

  … … … …

  信用卡信息以明文方式在网络上传送。一旦含有这些敏感信息的SOAP包被截获,信息很可能被篡改或泄漏。

  根据WS-Security规范,对SOAP 信封封装的全文或敏感部分的数据进行签名和加密,也可以只进行签名或者只进行加密。消息接收者通过验证签名来检验消息的完整性和发送者的真实性,而经过加密的消息,只有被授权用户才能解密,保证消息的机密性。

  经过签名和加密的消息传送处理如图2。

  图中所示,消息发送者对原始SOAP包中进行签名和加密后,将安全SOAP消息经过互联网发送,接收者对安全SOAP消息进行解密并验证签名后,再进行业务处理。

  本文使用常用的x.509标准的证书实现SOAP安全,在SOAP Header中下,加入以下安全令牌信息:

  xmlns:wsse=""

  Id="myCert"

  ValueType="wsse:X509v3"

  EncodingType="wsse:Base64Binary">

  MIIEZzCCA … …

  3.1 签名与验证

  本例签名中是用x.509标准的证书,消息发送者首先取得用户证书,使用证书中的私钥,采用特定的散列算法和签名算法,对SOAP Body 中敏感数据进行签名。然后将签名信息,包括签名数reference,签名结果,密钥信息,散列和签名算法等写入SOAP Header,绑定底层协议如HTTP,通过网络传输

  一个典型的SOAP签名在Header中下加入节点为:

  ()

  接受方收到消息后,分为两步验证:首先,检查摘要值的有效性,从DigestMethod中获得摘要算法,根据Reference URI中的标识在Body中找到签名数据,算出摘要值,将算出得摘要值与下的比较是否一致。若两者一致,提取KeyInfo中的公钥信息,并从中提取签名算法,将中的值解密后,与摘要值进行比较,验证消息的完整性。

  3.2 加密与解密

  对SOAP进行加密时,首先从接收方的x.509证书中获得加密的公钥,再用随机或秘密产生的会话密钥对SOAP消息中敏感数据采用对称加密算法加密,而对会话密钥采用非对称加密算法。将加密后数据和密钥信息写入SOAP Body中。

  一个典型的SOAP经加密后Body中含以下节点

  接收方收到SOAP消息后,根据自己的私钥和消息中的解密得到会话密钥,再根据会话密钥解密中的消息数据。

  消息加密后,以密文形式在网络上传送,即使被拦截,非授权用户也不能解密消息,保证了消息的机密性。

  3.3 SOAP安全包结构

  在对SOAP消息的签名和加密后,SOAP依然符合XML的格式规范,所有签名和加密的信息都在XML SOAP中以节点元素的方式显示,经过签名和加密的SOAP消息结构图如图3。

  Security中包括安全令牌和签名信息等信息,写入SOAP报头中,加密数据在SOAP Body中。Reference 中ID属性值与 Encrypted Data中的ID关联,表示Signature是对该部分数据进行的签名。

  4 SOAP安全

  按照WS-Security规范,通过对XML SOAP进行签名和加密,增强了Web Services的安全,使SOAP消息具有机密性、完整性和不可抵赖性。Web服务请求者,即消息发送方要在原始SOAP包中增加安全信息,需要修改SOAP消息内容,然后通过互联网发送消息。这样,用来生成SOAP 内容的应用也需要修改,破坏了软件工程中功能内聚原则,增加了开发人员的研发和代码维护工作。

  Web 服务安全的理想解决方案是对用户以及Web业务隐藏安全细节,不需要用户进行额外设置,也不需要修改Web业务的代码。在增强系统安全性时,尽可能不改变单个Web Service请求和服务的业务代码,使系统更易扩展和维护[8]。

  为此,可以采用专门的安全服务器在系统内部处理SOAP的安全,即SOAP安全。SOAP安全负责SOAP包的安全方面的工作,包括对由内向外的SOAP消息进行签名和加密,以及由外向内的SOAP包进行验证和解密。安全验证与Web应用分开,这样的方式减轻了应用服务器的开销,仅专注于业务处理,使得Web服务更具扩展性,安全对业务透明。对已有系统,使用安全,不会额外增加用户和开发人员的工作量。

  使用安全的SOAP传输模型如图四,消息发送方生成SOAP消息,传送给SOAP安全,SOAP安全中有一个敏感数据表,保存所有敏感数据标签,例如 表示身份证号、代表信用卡号。安全分析消息发送方传来的SOAP,对含敏感数据标签的数据项签名并加密,封装成安全SOAP包。安全SOAP包通过互联网传给Web Services 服务方,而服务方的SOAP安全接收到SOAP后,在SOAP安全上先进行解密和验证,若验证通过,则解析成其中SOAP数据,给Web Services服务器,否则丢弃SOAP包。这种方式保证了跨越不同安全边界,在互联网上传递的SOAP包是经过签名和加密的。

  5 结束语

  Web Services安全是目前跨平台应用系统面临的重要安全问题之一,而SOAP作为Web Services数据交换和消息传递的基础,其安全独立底层传输协议。根据WS-Security规范,可以对SOAP 进行扩展,实现SOAP数据的签名和加密,保证了SOAP消息的机密性、完整性、不可抵赖性以及授权访问。采用采用插件式安全的方式处理SOAP安全问题,将业务处理与安全分开,对用户和开发人员透明,易于集成和维护,并且安全还可以重用。

  参考文献:

  [1] 周劲,刘洋,蔺永政.一种基于Web Service的分布式应用系统的设计[J].计算机应用研究,2007(2).

  [2] Web service[EB/OL].

  [3] 师群群,刘晓霞,李艾功.Web Services中SOAP安全性的研究与实现[J].微计算机信息,2008(30):58-59.

  [4] 张仙伟,张Z.Web服务的核心技术之一――SOAP协议[J].电子科技,2010,23(3).

  [5] WS-Security[EB/OL].

  [6] 曹刚,李亚伟.基于XML Web Service身份认证的研究与实现[J].微电子学与计算机,2006,23(8).

  [7] 景建笃,游晓黔. 安全Web Services 体系结构的研究[J].计算机工程与设计,2007,28(5).

  [8] Melzer I,Jeckle M.A Signing Proxy for Web Services Security[EB/OL].2003.

  [9] Bhargavan K.Verifying Policy-Based Web Services Security[C].the 11th ACM Conference on Computer and Communications Security:268-277.

  soap协议篇3

  关键词:SOAP;XML;解析算法

  1 引言

  Web service是SOA架构中开发业务组件的重要技术。SOAP是访问web service的重要协议。目前已有一些研究基于SOAP协议构建松耦合的web应用[1,2],但对SOAP消息的解析算法还有待深入研究。本文利用二叉树的非递归先序遍历算法,对SOAP消息进行解析,从而提高对web service的访问效率。

  2 SOAP消息类型

  SOAP的全称是简单对象访问协议,在现有的研究文献中,研究者在分析基于SOAP的Web服务结构以及SOAP消息构成后,利用XML的名称空间给SOAP添加了数字签名,从而对web服务进行了安全扩展[3]。在文献[4]中,还提出了一种基于SOAP的DoS攻击防范方案。

  一组基本的SOAP请求消息sp是一个二元组,sp=(sh,sb),其中,

  (1)sh是SOAP消息头部分,用于向SOAP消息中以可扩展方式添加信息。

  (2)sb是SOAP消息的body部分,sb={m1,m2,……,mn},是该SOAP消息中所请求的方法的集合。

  m是一个三元组,m=(n,ipm,opm),其中:

  (1)n是SOAP消息请求方法的名称。

  (2)ipm是请求方法的输入参数集合,ipm={ip1,ip2,……ipn}。

  (3)opm是请求方法的输出结果集合,opm={op1,op2,……opn}。

  下列代码是一组典型的SOAP请求消息:

  xmlns:xsi=""

  xmlns:xsd="">

  102009

  merry

  market

  在这组SOAP请求消息中,SOAP 请求的详细信息包含在 元素中。上面的示例请求了GetCustomerInfo方法。元素的子元素、、表示这个被请求方法需要的参数名。是方法返回值。在这个web service的SOAP请求中,不需要输出参数。

  在本文的第3节中,以这段SOAP消息代码为例,利用DOM对SOAP进行文档对象解析的原理。

  3 文档对象模型原理

  目前对XML文档的解析基于两个原理:基于事件流的解析(SAX)[5]和基于对象树的解析(DOM)[6]。使用DOM的相关类和接口可以将SOAP消息转换成DOM树。这种转换后的DOM树是一种分层对象模型,具有唯一的根节点和若干子节点。第2节中的SOAP请求消息经过DOM转换,可以得到唯一的DOM树,结构如图1:

  4 SOAP消息的二叉树转换

  通过第3节的分析研究可知,DOM树符合数据结构中对树的定义,但非二叉树。为应用算法提高对SOAP消息的访问效率,需要将SOAP消息对应的DOM树转换成二叉树。算法是:

  Input:sp

  Output:spBTree

  1. spBTree=null;

  2. for all(n∈sp.sb){

  if(n.hasSiblingNodes){

  n.LastChildNodes=sp.nextSiblingNodes;

  }

  }

  3. for all(n∈sp.sb){

  if(!sb.firstChildNodes){

  sb.ChildNode=null;

  }

  }

  4.return spBTree

  5 利用非递归先序算法解析SOAP消息

  二叉树先序遍历的递归算法通常效率很低,而且有的程序设计语言不支持递归[7]。这时,可以利用堆栈保存操作过程中指针所指向的结点位置,使得遍历完左子树的叶子结点时能够返回到上一层,然后再访问其右子树。文献[7]中阐述了二叉树的非递归先序遍历算法,经验证,可以应用到由DOM树转换成的二叉树上,完成对SOAP消息的解析过程。

  6 结论

  SOAP协议是SOA体系中的重要协议。访问web service必须遵守此协议。由于二叉树的简便特性,许多算法都是基于二叉树。本文成功的进行了DOM树到二叉树的转换。使得针对二叉树的非递归先序遍历算法能够在解析SOAP协议时的到应用,提高了访问web service,处理SOAP消息的效率。

  参考文献

  [1]杨磊,王建斌,马光思,程永阳.基于SOAP协议和Ajax技术构建Web应用[J].计算机技术与发展.2008,18(1).

  [2]翟峰,郝克刚,葛玮.基于SOAP构建Axis上的Web Services[J].计算机应用与软件.2008(1).

  [3]樊佑磊,张亚珍.基于SOAP安全扩展的Web服务研究[J].网络通讯及安全.2008(1).

  [4]邓凯,裴浩.基于SOAP的DoS攻击防范方案[J].计算机工程与设计.2008,29(3).

  [5]王芳,李正凡.用SAX解析XML文档的实现方法[J].华东交通大学学报.2004,21(1).

  [6]王建.基于DOM的XML数据访问技术[J].计算机与数字工程.2008,36(2).

  soap协议篇4

  1简单对象访问协议(SOAP)

  SOAP是一种轻量级、基于XML并与平台无关的通信协议.用于分散型、分布式环境中交换结构化信息.所有的SOAP消息都是XML文档,SOAP利用XML技术定义一种可扩展的消息处理框架,在这个框架下包括3个部分:描述消息和处理方法的表示框架,描述编码类型的集合及描述远程过程调用和响应的机制[3].这三部分在功能上是正交的、彼此独立的.SOAP的特点在于其本身并不定义任何编程模型或特定语义实现,并且相对于平台、操作系统、目标模型和编程语言而言是独立的,完全继承了XML的开放性和可扩展性,使用基于TCP/IP的应用层协议HTTP、SMTP、FTP等,可以与现有通信技术最大程度地兼容.作为一个XML文档,SOAP消息由3个部分组成:SOAP封装,SOAP头和SOAP主体.图1用图例说明SOAPEnvelope的结构,而其文档结构方式为封装作为文档的根元素,定义了SOAP消息的内容:它要和什么一起工作,是可选的还是必须的[4].头是可选的,用于为SOAP消息添加特征,可用来实现认证、路由等.而主体是强制信息部分,承载传输的数据.一个发出在银行账户之间转账请求的SOAP消息,可表示为22-34243998-283843100.00如果接收方支持请求/响应,且能够成功地处理该SOAP消息,它应向最初的发送方返回另一条SOAP消息.在这种情况下,响应信息也应包含在元素中,处理成功的SOAP消息表示为22-34243933.4598-283843932.73该消息处理框架还定义了一个名为的元素,用于发生错误时在元素中表示错误.因为,如果没有一种标准的错误表示方法,每个应用程序将不得不自己创建,从而使得通用基础结构不可能区分成功和失败.SOAP消息处理框架完全支持对错误的表示.处理失败的SOAP消息表示为soap:ServerInsufficientFunds22-3842439100.0089.23该消息处理框架包含了一个元素,指明在处理该SOAP请求时如果发生了“InsufficientFunds(资金不足)”错误,会返回一个包含错误内容的消息.

  SOAP提供了完整的处理模型和一个功能丰富灵活的框架以定义高级应用程序协议.这些协议可在分布式异构环境中提供更好的互操作性.

  2用SOAP实现异构系统的衔接

  2.1应用背景

  某集团是一个典型的大型金融保险服务企业.和其他大型金融服务企业一样,由于业务的多元化和历史的原因,企业的信息化系统结构复杂,作业平台种类繁多.例如,早期的IBMAS400、HPUnix、SUNSolaris以及WindowsServer等,对于Web服务器,也有Apache和IIS之分.该公司的精算系统是用.NET框架开发的,数据资料在SQLServer2000数据库中,而精算系统下属的保险建议书系统则是建立在HPUnix环境上.原本,保险建议书系统一直不能及时地读取精算系统中新险种核保数据,导致有新险种推出的时候,保单的出单日期总要推迟3~5个工作日,影响了新险种的推广速度.为了解决目前系统中存在的问题,可通过SOAP协议,用SOAP消息访问Web服务来完成两个系统间点对点的通信,实现了这两个系统的衔接.在这个方案中,为在HPUnix上的保险建议书系统构建一个SOAP通信的客户端,然后为精算系统构建一套Web服务,并把服务公开.

  2.2SOAP客户端和SOAP服务端

  SOAP协议有着广泛的支持性,许多平台和语言都有相应的模块对其提供支持.用于在Unix平台下开发的Perl语言,就专门有一个模块SOAP::Lite来提供SOAP服务器和客户端的编程接口[5].

  在SOAP服务器中,有一个WebService提供了最新险种信息的数据集.

  [WebMethod]publicDataSetNewMarkInfoQuery(){stringconnectionString=“DataSource=10.100.8.118;database=CPIC-ING;PersistSecurityInfo=False;UserID=cpicuser;pwd=********”;SqlConnectionnwindConn=newSqlConnec-tion(connectionString);SqlCommandselectCMD=newSqlCommand(“SELECTMark,MType,DetailClass,InsureAmtFROMIns-ItemWhereIsSaled=2”,nwindConn);mandTimeout=30;SqlDataAdaptercustDA=newSqlDataAdapter();custDA.SelectCommand=selectCMD;nwindConn.Open();DataSetcustDS=newDataSet();custDA.Fill(custDS,“NewMarks”);nwindConn.Close();returncustDS;}HPUnix上的保险建议书系统需要和精算系统进行通信.它在访问精算系统提供的WebService时需要初始化一个SOAP客户端对象,并通过此对象向SOAP服务器发送一个XML格式的请求,实际上是向监听程序发送请求.下面给出一个用Perl语言编写的SOAP请求.

  useSOAP::Lite;$SOAP::Constants::DO-NOT-USE-CHARS-ET=1;my$soap=SOAP::Lite->uri(‘>on-action(sub{join‘/’,‘>proxy(‘>name(NewMark-InfoQuery)->attr({xmlns=>‘>call($method);my@nodes=$result->valueof(’//NewMarks);foreach$node(@nodes){print$node->{‘Mark’},“-”,$node->{‘InsureAmt’},“\n”;}这个SOAP请求位于10.100.8.117服务器(也就是精算系统所在的服务器)上的MarkService服务,呼叫NewMarkInfoQuery方法.NewMarkInfo-Query就是精算系统中公开的有关新险种精算信息的DataSet.SOAP客户端可以接收SOAP服务器的回复消息.如果请求成功,SOAP客户端得到一个关于新险种的DataTable;如果失败,SOAP客户端也会得到一个带“soap:Fault”元素的SOAP消息.这样就实现了在险种建议书系统中得到精算系统内的实时险种更新数据,从而实现了HPUnix环境上的系统和.NET环境下系统间的通信.

  2.3使用WSDL公开SOAP服务

  SOAP服务端的NewMarkInfoQuery成功地为HPUnix环境上的系统提供服务.但如果希望这个SOAP服务能为更多的需要该服务的异构系统服务的话,就应该把它公开.公开一个服务需要为这个服务的访问方式、功能等等进行描述[6].WSDL是一种用于描述网络服务的语言,它本身是基于XML格式,描述服务可以执行哪些操作以及使用什么样的消息.操作和消息都是用抽象术语描述的,然后通过将它们绑定到合适的网络协议和消息格式中来实现.WSDL的编写有3个步骤:定义服务接口、指定参数、描述消息传递和传输.

  2.3.1定义服务接口

  以上描述了精算系统提供的一个SOAP服务,但事实上精算系统有许多信息需要供其他系统调用,也就是说有许多服务需要公开,例如NewMark-InfoQuery方法和GetMarkContrackYear(str-ingmark)方法———返回特定险种保障年期的一个服务.每个WSDL文件的根元素都是.元素包含一个或多个元素,实际上,每个元素都是一系列op-eration,也可以将单个元素看作是将各种方法组成类的一个逻辑分组.例如,上述某集团的精算系统需要与险种建议书系统、核保出单系统进行交互,那就需要分别定义与他们交互的功能性.也就是说,WSDL文件将为建议书系统和核保出单系统各定义一个,以下展示一个WSDL文件的结构.<?xmlversion=“1.0”encoding=“UTF-8”?>…………

  2.3.2指定参数

  参数是用标记定义的,Type标记代表参数的类型.对于GetMarkContrackYear(stringmark)方法,有一个输入参数,还有一个返回值,在WSDL中定义为输出参数.

  2.3.3描述消息传递和传输

  WSDL的这部分用来指定SOAP服务器的实际位置,绑定为特定所定义的操作和指定消息格式、协议细节.部署了定义好的WSDL,就可以让希望调用WSDL中服务的客户端按照WSDL中定义的方式远程调用SOAP服务,并得到WSDL中定义的结果类型.图2是一个关于WSDL、SOAP服务端以及SOAP客户端相互关系的示意图.

  3结束语

  soap协议篇5

  关键词:Web服务;SOAP头;身份验证;ASP.NE;C#

  中图分类号:TP393文献标识码:A文章编号:1009-3044(2009)04-0849-02

  Authentication Technology of Web Services Based on SOAP Header

  LU Shou-dong

  (Department of Computer And Information Management, Guangxi University of Finance and Economics, Nanning 530003, China)

  Abstract: This paper introduces the authentication technology of Web Services based on SOAP header, and explains its programming pattern under .NET plat through the concrete example.

  Key words:Web Services; SOAP Header; Authentication; ; C#

  Web服务(Web Services)是目前最为流行的应用于异构环境的分布式组件开发技术。作为一种部署在Web上的可编程访问的对象,如何确保其安全性是在具体应用中必须考虑的一个重要问题。为控制对Web服务的合法访问,对服务使用者的身份进行验证是很有必要的。本文主要介绍一种基于SOAP头的Web服务身份验证技术,并通过具体示例说明其编程模式。

  1 Web服务简介

  Web服务是一种通过网络进行、发现、调用的自描述的服务器端软件组件,其实现依赖于一系列的标准协议或规范(如图1所示),包括HTTP、XML、SOAP、WSDL、UDDI等。简言之,Web服务以XML与XML Schema为数据编码格式与数据类型标准,使用WSDL进行描述,使用UDDI进行与发现,使用SOAP进行访问,并通过HTTP等进行传输。Web服务的上层核心标准都是基于XML的,具有优异的跨平台特性,这为Web服务在异构平台上进行系统的集成与交互提供了充分的保证。

  2 SOAP协议概况

  SOAP即简单对象访问协议(Simple Object Access Protocol),是一种基于XML的、简单的、轻量级的通信协议,用于在客户端与Web服务之间传递消息(包括请求消息与响应消息)。

  SOAP协议使用XML描述消息。一个SOAP消息其实是一个XML文档,包括Envelope(SOAP信封)、Header(SOAP头)、Body(SOAP体)3个元素。其中,Envelope是整个SOAP消息的根元素,是必须的;Header是SOAP消息是可选元素,若存在,则必须是Envelope的第一个直接子元素;Body是SOAP消息必须有的元素,而且是Envelope的直接子元素,用于包含Web服务的调用信息(如所调用方法的名称及有关参数等)或响应信息以及相关的错误信息。SOAP消息的结构如图2所示。

  在SOAP消息中,SOAP体的使用是由SOAP协议规定,而SOAP头的使用则较为灵活,可由用户根据需要进行定制。通常,可在SOAP头中添加一些条目,以包含具体应用所必须的重要信息(如账户信息、事务标识等),并据此实现相应的功能。

  3 基于SOAP头的身份验证

  通过在SOAP头中添加适当的验证信息,并由Web服务的进行读取与处理,即可实现对服务使用者的身份验证。在此,以 Web服务为例,说明基于SOAP头的Web服务身份验证技术。

  3.1 基本步骤

  Web服务允许定义并处理SOAP头条目,其基本步骤为:

  1) 创建一个继承自SoapHeader的类AuthSoapHeader,该类的名称与公共成员变量即为SOAP头条目元素的名称与内容子元素。

  2) 在Web服务类中声明一个AuthSoapHeader类的公共变量MyASH。

  3) 为Web服务的有关方法应用SoapHeader属性,并将其MemberName属性设置为MyASH。

  4) 在应用了SoapHeader属性的Web服务方法中访问MyASH的成员变量,并完成相应的处理过程。

  相应地,在调用Web服务的客户端,可通过以下基本步骤设置SOAP头条目:

  1) 创建一个Web服务的实例变量MyAService。

  2) 创建一个AuthSoapHeader类的实例变量MyASHeader,并为其成员变量赋值。

  3) 将MyASHeader赋给MyAService.AuthSoapHeaderValue(即设置SOAP头条目),并调用Web服务的有关方法以完成相应的功能。

  3.2 应用示例

  如图3所示,为一系统登录表单,用于对系统用户进行身份验证,其验证过程是通过调用Web服务完成的,而用户名与密码则通过SOAP 头进行传送。为简单起见,该示例假定用户名与密码均非空串时即为合法。单击“确定”按钮后,若为合法用户,则提示信息显示为“Success”,否则为“Failure”。下面,简述该示例的设计要点。

  1) Web服务AuthService的设计

  在Visual Studio .NET中使用 Web服务模板新建一个Visual C#项目AuthService,并将Service1.asmx重命名为Authentication.asmx,然后在Authentication.asmx.cs中编写相应的代码。关键代码如下:

  ……

  using System.Web.Services.Protocols;

  namespace AuthService {

  public class AuthSoapHeader : SoapHeader {

  public string Username;

  public string Password; }

  [WebService(Namespace="")]

  public class AuthService : System.Web.Services.WebService {

  ……

  public AuthSoapHeader MyASH;

  [WebMethod]

  [SoapHeader("MyASH")]

  public string AuthenticateUser() {

  if (MyASH==null)

  return "Failure!";

  if (VerifyUser(MyASH.Username,MyASH.Password))

  return "Success";

  return "Failure"; }

  private bool VerifyUser(string Username,string Password) {

  if ((Username!="")&&(Password!=""))

  return true;

  return false;

  } } }

  2) 客户端Login.aspx的设计

  ① 在Visual Studio .NET中使用 Web应用程序模板新建一个Visual C#项目AuthClient。

  ② 添加对Web服务AuthService的Web引用,并命名为Authentication。

  ③ 将WebForm1.aspx重命名为Login.aspx,同时设计好其界面(如图3所示),主要包括用户名文本框TB_Username、密码文本框TB_Password、提示信息标签L_Message与“确定”按钮。

  ④ 为Login.aspx.cs添加功能代码。

  首先,引用命名空间AuthClient.Authentication:

  using AuthClient.Authentication;

  然后,编写“确定”按钮的单击事件代码:

  AuthService MyAService=new AuthService();

  AuthSoapHeader MyASHeader=new AuthSoapHeader();

  MyASHeader.Username=TB_Username.Text;

  MyASHeader.Password=TB_Password.Text;

  MyAService.AuthSoapHeaderValue=MyASHeader;

  L_Message.Text="提示信息:"+MyAService.AuthenticateUser()+".";

  4 结束语

  SOAP头为Web服务及其客户端之间关键数据的传递提供了一种灵活且有效的途径,有利于实现身份验证、事务处理等特殊功能。文中所述,即为利用SOAP头对Web服务使用者进行身份验证的关键技术与与典型模式。

  参考文献:

  [1] 石国志 Web服务实用案例教程[M].北京:清华大学出版社,2004.

  soap协议篇6

  关键词:Web Service;Ajax;SOAP协议

  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)11-20341-02

  1 前言

  Web Service主要是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。Web Service所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP、WSDL等,所以Web Service可以在任何支持这些标准的环境(Windows、Linux)中使用。Web Service技术的不断成熟,使得面向服务的架构(SOA)思想得到了很好的应用。

  Ajax引擎实现无需页面无刷新等待的情况下,进行与服务器之间的数据通信,使用它可以构建更为动态和响应更灵敏的Web应用程序。基于SOAP协议,通过Ajax调用Web服务,实现异构程序和平台无关的数据通信。

  2 关键技术

  2.1 Ajax

  在Ajax之前,WEB站点强制用户进行提交、等待、重新加载的模式,用户的动作和服务器的反应同步,Ajax提供与服务器异步通信的能力。通过Ajax用户通过JavaScript和DHTML向服务器发出异步请求,执行更新或查询数据,当请求返回时来更新UI,而不是刷新整个页面,降低了与服务器之间通信的数据量,加快了用户请求的反应时间。

  在WEB浏览器使用SOAP服务比较困难,大多数流行的WEB浏览器在生成和处理XML方面会有不同,支持XML处理的API比较少。比较常见的方法是通过XMLHttpRequest API,XMLHttpRequest是一个用于执行异步HTTP请求的JavaScript对象。AJAX框架的关键是名为XMLHttpRequest的JavaScript对象,通过它客户端开发人员可以在不打断用户操作或者在充分使用隐藏表单的情况下通过HTTP直接发送和接收XML文档。现在常用的浏览器(IE, Mozilla, Safari, Opera)都特别提供了对XMLHttpRequest对象的支持,同时也广泛支持XML DOM。

  2.2 SOAP

  目前有很多应用程序通过使用远程过程调用(RPC)在诸如 DCOM 与 CORBA 等对象之间进行通信,但是,RPC会产生兼容性以及安全问题;防火墙和服务器通常会阻止此类流量。通过HTTP在应用程序间通信的就是更好的方法,因为HTTP被所有的因特网浏览器及服务器支持。SOAP(Simple Object Access Protocal,简单对象访问协议)可以完成这个任务的。SOAP提供了一种标准的方法,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。SOAP技术用于实现异构程序和平台间的数据交换,从而能够使应用能被广泛地访问。SOAP是将基于HTTP的WEB技术与XML的灵活性和可扩展性组合在一起。

  SOAP消息处理框架定义了一套XML元素,封装XML消息以便在系统中间进行传输。该框架包含的核心XML元素有Envelope,Header,Body和Fault,目前常见SOAP消息有1.1和1.2两个版本。Envelope是SOAP消息的根元素。Envelope元素包含一个可选的Header元素,一个必须的Body元素,Body元素包含所以的调用和响应信息。Fault元素提供处理此消息发生的错误。HTTP协议绑定定义了在HTTP上使用SOAP的规则。SOAP请求、响应映射到HTTP协议请求、响应模型。对于SOAP消息使用POST方式进行请求,SOAPAction表示该消息的意图。

  3 WEB Service架构

  实现通过页面异步调用目标服务器的一个Web服务,所用开发环境是Visual studio2005。首先创建 Web服务,提供实现两个整数相加的服务。继承WebService实现MyService类,在WebService继承类中可以提供Web方法和非Web方法,在方法前标注[WebMethod],表示该方法是一个Web方法,Add方法就是一个Web方法。示例代码:

  [WebService(Namespace="")]

  [WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]

  public class MyService : System.Web.Services.WebService{

  [WebMethod]

  public int Add(int i ,int j) {

  return i + j;

  }

  }

  然后在Web页面中添加SOAP消息的请求,这里通过Ajax进行发送请求SOAP消息,由于XMLHttpRequest不是一个W3C标准,所以可以采用多种方法使用JavaScript来创建XMLHttpRequest的实例。Internet Explorer把XMLHttpRequest实现为一个ActiveX对象,其他浏览器(如Firefox、Safari和Opera)把它实现为一个本地JavaScript对象。示例代码:

  function getXmlHttpRequestObject() {

  if (window.XMLHttpRequest) {

  return new XMLHttpRequest(); //Not IE

  } else if(window.ActiveXObject) {

  return new ActiveXObject("Microsoft.XMLHTTP"); //IE

  } else {

  alert("not supported");

  }

  }

  接着将SOAP消息发送,XMLHttpRequest的readyState属性返回当前请求的状态,0表示未初始化,4表示上次数据接受完毕,这两个状态下都可以开始一个新的请求。然后通过open方法创建一个新的Http请求,并指定此请求的方法。通过onreadystatechange设置readyState属性改变时的事件处理句柄。示例代码:

  function sendRequest(){

  if (receiveReq.readyState==4 || receiveReq.readyState==0) {

  receiveReq.open("POST", "MyService.asmx", true);

  //SOAP1.1

  receiveReq.setRequestHeader ("Content-Type","text/xml; charset=utf-8")

  receiveReq.setRequestHeader ("SOAPAction", "") ;

  var msg="<?xml version="1.0" encoding="utf-8"?>"

  +"<soap:Envelope xmlns:xsi=""

  +" xmlns:xsd=""

  +" xmlns:soap="">"

  +" <soap:Body>"

  +"<Add xmlns="">"

  +"<i>1</i>"

  +"<j>2</j>"

  +"</Add>"

  +" </soap:Body>"

  +"</soap:Envelope>"

  receiveReq.onreadystatechange=handleAdd;

  receiveReq.send(msg);}

  }

  示例代码中,setRequestHeader设置http封装格式,变量msg的内容就是SOAP1.1格式的消息请求,进行两个整数i和j的相加请求。将onreadystatechange设置为函数handleAdd,进行SOAP消息响应的处理。

  最后是对SOAP消息响应的处理,readyState属性为4表示接受完毕,根据http请求状态status为200表示http响应成功,返回如果是字符串可以通过responseText属性获取,如果是xml文件可以通过responseXML属性获取。示例代码:

  function handleAdd() {

  if (receiveReq.readyState==4) {

  if (receiveReq.status==200){

  // 对receiveReq的响应responseXML或responseText进行处理

  } else {

  alert("status:" + receiveReq.statusText);

  }

  }

  }

  4 结束语

  本文中,介绍了基于SOAP协议架构WEB Service的步骤,但是这个过程没有提供安全性解决方案。对于一个真正安全的WEB Service来说,证书、密钥和加密同样是必不可少的。最健壮的WEB Service安全性源于实现了使用来自认证机构的私钥、公钥进行身份验证的加密消息传递。XML加密允许web服务用户发送保留XML格式的加密SOAP消息。

  参考文献:

  [1] W3C. SOAP:Simple Object Access Protocol Specification1.1 .2000.

  [2] Nicholas C Zakas, Jeremy McPeak, Joe Fawcett. Professional Ajax .Wiley Publications, 2006.

  [3] Christian Gross. Ajax Patterns and Best Practices[M]. Apress L P, 2006.

  [4] 王东,孙彬. 基于Ajax的MVC框架的改造分析[J]. 计算机应用, 2007,(S1):293-295.

  [5] 程亚娟, 赵政. XML数据存取技术[J]. 微型机与应用, 2002,(01):59-60.

  [6] 张环宇,张建文. 基于AJAX技术的Web应用架构分析. 电脑知识与技术,2007,(15):745-746.

  soap协议篇7

  摘 要:异构的信息系统由于具有各自独立的身份认证和用户管理模块,存在着用户身份不一致、信息重复,应用系统无法整合、安全性差等问题。为此提出了一种基于统一的数据交换标准和接口标准,将不同的用户管理模块和认证模块进行集成的方法,设计了系统模型、交互流程和认证协议,实现了基于企业服务总线(ESB)的统一身份认证系统。实验结果表明,系统能有效地避免身份认证逻辑的重复和数据的冗余,提高认证的效率和系统资源的利用率。

  关键词:企业服务总线;面向服务的体系结构;统一身份认证平台;简单对象访问协议

  中图分类号: TP309.7 文献标志码:A

  Abstract:The selfgoverned identity authentication and user management lead to different identity, redundant information, selfgoverned system and bad security in heterogeneous information systems. A new method of integration based on uniform data exchange standard and interface standard, especially the system model, data flow and authentication protocol were put forward. Furthermore, a uniform identity authentication system based on Enterprise Service Bus (ESB) was realized. The experimental results show that the system can avoid redundant authentication logic and data, and it also enhances authentication efficiency and makes the best use of the available resources.

  Key words:Enterprise Service Bus (ESB); ServiceOriented Architecture (SOA); Uniform Identity Authentication Platform (UIAP); Simple Object Access Protocol (SOAP)

  0 引言

  随着计算机和网络应用的快速发展,企业、院校、机关等单位的信息系统日益增多,各个信息系统之间的数据、流程相互间关联的需求也越来越多。由于创建的时间不同、面对的需求不同,这些信息系统在技术体系结构、操作系统平台、编程语言等方面往往是异构的[1]。这些异构的信息系统在设计时,往往从自身需求出发设计独立的身份认证和用户管理模块,随着信息系统的不断增多,这种传统的认证机制逐渐暴露出用户信息无法统一、信息重复、身份不一致,应用系统无法整合、系统安全性差,用户操作复杂、维护难度大等问题[2-3]。

  软件架构的发展,尤其是面向服务的体系结构(ServiceOriented Architecture, SOA)的兴起为异构系统之间的松耦合集成创造了条件[4-5]。本文基于Web Service技术实现SOA架构下的身份认证,采用统一的数据交换标准和接口标准,将不同的用户管理模块和认证模块集成在统一的平台上,实现各异构系统的统一身份认证,管理方式简单、统一,避免了信息冗余和信息孤岛造成的系统间不一致性。采用基于证书的身份认证管理机制,对应用系统的访问进行统一控制,增强了系统的安全性。

  1 基于ESB的统一身份认证系统设计

  1.1 系统模型

  企业服务总线(Enterprise Service Bus,ESB)是传统中间件技术与可扩展标记语言(Extensible Markup Language,XML)、Web Service等技术结合的产物,用于基于SOA的解决方案的实现[6]。ESB提供信息格式的转换以实现应用服务的无缝集成,它可以消除不同应用之间的技术差异,让不同的应用服务协调运作,实现不同服务之间的通信与整合。

  本文设计的基于ESB的统一身份认证模型如图1所示。

  基于ESB的统一身份认证模型主要包括统一身份认证平台(Uniform Identity Authentication Platform,UIAP)、客户端、应用服务器和ESB。UIAP、客户端、应用服务器和ESB之间通过简单对象访问协议(Simple Object Access Protocol, SOAP)进行通信。

  ESB是客户端、应用服务器与UIAP的中介,客户端与应用服务器通过ESB调用UIAP的服务。UIAP通过标准接口服务,采用SOAP封装请求和响应。当ESB收到应用客户端和应用服务器的服务请求时,ESB查找请求的服务并返回给客户端和应用服务器。

  在ESB中,服务执行引擎用于客户端和应用服务器请求服务的发现、选择、编排等功能。服务适配器主要实现不同格式的消息协议转换。服务路由器用于完成客户端和应用服务器请求服务的发现、绑定、调用等操作。服务监控器可以对服务运行的状态进行监控和管理。服务注册中心提供服务的查找和注册功能。

  1.2 交互流程设计

  Web服务描述语言(Web Service Description Language, WSDL)和SOAP是SOA互操作性的基础[7],UIAP采用WSDL描述服务接口,客户端、应用服务器和UIAP之间通过基于WSSecurity加密的SOAP消息进行通信。

  1) 客户端与UIAP的交互流程。

  客户端通过统一认证服务(Uniform Authentication Service, UAS)完成与UIAP的交互,用户利用用户凭证在Web门户登录,Web门户向统一认证服务请求认证,身份认证成功后,统一认证服务创建安全断言标记语言(Security Assertion Markup Language, SAML)令牌,并返回SAML令牌给用户,用户就可以携带这个SAML令牌访问服务。客户端与UIAP的交互流程如图2所示。

  2)应用服务器与UIAP的交互流程。

  用户携带SAML令牌访问应用服务器,决策执行点(Policy Enforcement Point,PEP)把用户的SAML令牌交给策略决策点(Policy Decision Point,PDP)进行验证,PDP根据用户SAML令牌及相关参数对用户进行授权,并把响应结果发送给用户。应用服务器与UIAP的交互流程如图3所示。

  1.3 基于证书的统一认证协议

  客户端(Client, C)与UIAP之间基于证书的统一认证协议具体步骤如下。

  1)CUIAP。

  rA,Request,CertC,sigC{Request},C向UIAP并发送认证请求。其中:rA为C产生的随机数,Request为C的请求,CertC为C的加密证书,sigC{Request}为C利用证书私钥对Request的签名。

  2)UIAPC。

  rA,CertUIAP,sigUIAP(Response),EC(Tokensaml),UIAP收到消息后,首先验证用户证书有效性,并验证请求签名;然后发送应答消息返回C。其中:rA为接收到的C的随机数,CertUIAP为UIAP的证书,sigUIAP(Response)为UIAP利用证书私钥对Response的签名,EC(Tokensaml)表示利用C的证书公钥加密的Tokensaml。

  3)CUIAP。

  C将对UIAP的验证结果发给UIAP。

  经过以上步骤,客户端和UIAP实现了双向身份认证和令牌协商,共享SAML令牌Tokensaml。

  2 系统关键技术与实现

  2.1 SOAP消息机制

  基于SOAP的统一身份认证消息请求/响应过程包括4个阶段:服务请求者构造SOAP消息,服务提供者接收并解析SOAP消息,服务提供者响应并构造SOAP消息,服务使用者接收并解析SOAP消息。

  1)服务请求者构造SOAP消息。

  客户端的SOAP请求内容为一个必需的SOAP信封(SOAP Envelope)。SOAP Envelope是由一个可选的SOAP消息头(SOAP Header)和一个必须SOAP消息体(SOAP Body)组成的XML文档。SOAP Header是通信双方尚未预先达成一致的情况下,为消息增加特性的通用机制;SOAP Body为消息的最终接收者所需的信息提供了一个容器[8-9]。

  SOAP请求如下:

  程序前

  string

  程序后

  其中CheckClient是UIAP上被调用的方法,参数为服务请求者的证书。

  2)服务提供者接收并解析SOAP 消息。

  UIAP上处理SOAP请求的对象是UAS。UAS接收到客户端发来的SOAP请求后解析报文,提取出请求的方法,将其映射为本地的组件调用,然后调用真正的应用程序,处理SOAP请求。

  3) 服务提供者响应并构造SOAP消息。

  UAS从SOAP请求中解析出SOAP请求方法CheckClient,连接数据库,根据参数执行SOAP请求。最后将执行结果加上SOAP Envelope信息,得到对上述SOAP请求的响应,包括SOAP响应头和SOAP响应内容。SOAP Envelope的具体内容:

  程序前

  xmlns:xsi=.

  [7]

  曹刚,李亚伟.基于XML Web Service身份认证的研究与实现[J].微电子学与计算机,2006,23(8):61-63.

  [8]

  朱谱熠.基于SOAP的Web服务访问控制设计与实现[D].重庆:重庆大学,2008.

  [9]

  罗婵,董丽丽,马宗方.基于SOAP协议的统一身份认证服务设计与实现[J].计算机技术与发展,2006,26(10):237-239.

  [10]

  张慧,李建华,马华.一种基于SAML的Web服务单点登录模型研究与实现[J].计算机系统应用,2008,19(7):49-52.

  [11]

  孙建华.基于SAML的统一身份认证服务研究与实现[D].呼和浩特:内蒙古工业大学,2009.

  [12]

  贾宗星,董丽丽.基于Web Services单点登录系统的设计与实现[J].计算机时代,2006,22(9):62-64.

  [13]

  袁利永,屠雄刚.基于Web Services实现身份统一认证[J].计算机与数字工程,2005,33(9):134-136.

  收稿日期:2011-08-08;修回日期:2011-09-27

  基金项目:国家863计划项目(2008AA01Z404)

  soap协议篇8

  WSDL文档的元素

  在WSD的应用中,所有的WS协议都是用WSDL和XSD编写的。WSDL主要可以描述服务提供的操作,如何访问服务以及协议相关的地址。

  ■ Types

  Types定义了Web服务使用的所有数据类型集合,可被元素的各消息部件所引用。它使用某种类型系统,一般使用XML Schema中的类型系统。它是一个数据类型定义的容器,包含了所有在消息定义中需要的XML元素的类型定义。

  ■ Message

  Message是通信消息数据结构的抽象类型化定义,它通过使用Types所定义的类型来定义整个消息的数据结构。

  ■ Operation

  Operation是对服务中所支持操作的抽象描述。一般单个Operation描述了一个访问入口的请求/响应消息对。

  ■ PortType

  PortType是对于某个访问入口点类型所支持操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。PortType具体定义了一种服务访问入口的类型(传入/传出消息的模式及其格式),一个PortType可以包含若干个Operation,而一个Operation则是指访问入口支持的一种类型的调用。在WSDL里面支持四种访问入口调用的模式: 单请求、单响应、请求/响应、响应/请求。

  ■ Binding

  Binding包含了如何将抽象接口的元素转变为具体表示的细节,具体表示也就是指特定的数据格式和协议的结合; 特定端口类型的具体协议和数据格式规范的绑定。Binding结构定义了某个PortType与某一种具体的网络传输协议或消息传输协议相绑定,从这一层次开始,描述的内容与具体服务的部署相关。

  ■ Port

  Port定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。Port描述的是一个服务访问入口的部署细节,包括通过哪个Web地址(URL)来访问,应当使用怎样的消息调用模式来访问等。其中消息调用模式则是使用Binding结构来表示。

  ■ Service

  Service是一个粗糙命名的元素,代表端口的集合; 相关服务访问点的集合。Service描述的是一个具体的被部署的Web服务所提供的所有访问入口的部署细节,一个Service往往会包含多个服务访问入口,而每个访问入口都会使用一个Port元素来描述。

  总地说来,PortType(与Message和Type元素的细节相结合)描述了Web服务是什么,Binding元素描述了如何使用Web服务,Port及Service元素描述了Web服务的位置。

  SOAP的用途

  SOAP(简单对象访问协议)是以XML形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制。在WSD网络服务中传输的都是SOAP消息。SOAP消息从发送方到接收方是单向传送,经常以请求/应答的方式实现。SOAP实现可以通过开发特定网络系统的特性来优化。

  SOAP决不只是一个漂亮的口号,它是一种即将深入渗透到未来分布式计算的技术。人们希望,SOAP结合其他技术,比如UDDI和WSDL,在Web服务这一概念的支持下,改变未来商业应用跨越Web进行通信的方法。甚至无法充分地表达出在开发者的工具包中加上SOAP知识的重要程度。

  WS协议

  WS协议是微软在去年和今年上半年提出的一整套网络服务协议,主要包括WS-Discovery、WS-Transfer、WS-MetadataExchange、WS-Eventing、WS-Policy、WS-Security、DeviceProfile等。整套WS协议,可以全面实现WSD的网络服务,与WSD发现过程相关的协议主要有三个。

  ■ WS-Discovery

  WS-Discovery,全名Web Services Dynamic Discovery,主要定义了网络服务的一套多播发现协议。最初的发现模式是客户端先主动寻找一个或多个目标服务,这是通过多播一个Probe消息实现的,这个Probe消息包括目标服务的服务类型和目标服务所在的范围。和Probe发的消息一致的目标服务将直接发送一个消息到此客户端。客户端为了定位服务,将发送一个Resolve多播消息到此网络,目标服务将直接发送一个消息到此客户端以确认。

  为了减少客户端的探测次数,当一个目标服务加入网络后,它就多播一个Hello消息到网络。客户端通过监听这个多播组就可以直接探测到目标服务,而不用重复地发Probe。WS协议机制可以应用在很多场合,例如打印机的发现。

  ■ WS-Transfer

  WS-Transfer主要是传递描述基于XML的服务信息的协议,主要描述了几个方面: 目标设备、目标服务。在WSD发现过程中主要用到的有以下两种消息的传输: Get消息,其作用是获取服务的描述信息; Get Response,其作用是把目标服务的具体信息发送给客户端。

  ■ DeviceProfile

  DeviceProfile,又称Devices Profile For Web Services (DPWS),是关于WS系列协议的细节规定,主要包括以下几个方面: 发送和接受网络服务的安全信息; 自动发现网络服务; 描述一个网络服务; 定制和接收服务事件。

  UDDI

  UDDI注册中心包含了通过程序手段可以访问到的对企业和企业支持的服务所做的描述。此外,还包含对Web服务所支持的因行业而异的规范、分类法定义以及标识系统的引用。UDDI提供了一种编程模型和模式,它定义了与注册中心通信的规则。UDDI规范中所有API都用XML来定义,包装在SOAP信封中,在HTTP上传输。

  UDDI消息的传输过程是,首先通过HTTP从客户机SOAP请求传到注册中心节点,然后再反向传输。注册中心服务器SOAP服务器接收UDDI SOAP消息、进行处理,然后把SOAP响应返回给客户机。就注册中心条例而言,客户机发出的要修改数据的请求必须确保是安全的、经过验证的事务。


标签:服务消息we协议一个请求应用安全


相关推荐

最新推荐

关灯