【IT168技术文档】您是否被 WS-Security 规范级别互操作性问题困扰着?Web 服务经常被视为应用程序互操作性的理想解决方案,无论平台、供应商和编程语言如何,它都能 有效地进行应用程序集成。但它们并不能彻底避免互操作性问题。本文将介绍一些由于不同 WS-Security 规范版本之间的不兼容造成的常见问题,从而找到处理您的环境中的问题的非常好的方法。本文最后提供一个实用图表,对每个解决方案的好处和缺点进行了比较,务必记得阅读其中的内容。
互操作性问题概述
大部分互操作性问题都不是源自基础 Web 服务规范(这些规范已经相当成熟和稳定了),而是由于各种 WS-* Web 服务扩展规范(如 WS-Security)造成的。随着这些标准的不断发展,供应商必须选择支持哪个版本的规范,而有时候开发人员会需要处理不同规范间不兼容的问题。
WS-Security 标准提供了将身份验证、完整性和保密性应用到 SOAP 消息的机制。在企业中采用 Web 服务和面向服务的体系结构(Services-Oriented Architecture,SOA)时经常需要使用这些功能。从 IBM WebSphere® Application Server V5.0.2 开始,IBM® 中间件开始提供对 WS-Security 的支持。WS-Security 的这个实现基于 OASIS 工作草案 13 规范。WebSphere Application Server V5.1 和基于 Java™ 2 Platform Enterprise Edition (J2EE) 1.3 的其他 IBM 中间件(如 IBM WebSphere Portal Server V5 和 IBM WebSphere Business Integration Server Foundation V5)也包含基于草案 13 规范的 WS-Security 实现。通过 WebSphere Application Server V6.0 中包含的 J2EE 1.4 运行时,IBM 提供了基于 WS-Security 1.0 规范的 WS-Security 实现。IBM WebSphere Process Server 和使用 J2EE 1.4 运行时的其他 IBM 中间件包括基于 1.0 版规范的 WS-Security 实现。
不幸的是,由于 WS-Security SOAP Header 规范的连接格式的变化,符合草案 13 规范的 Web 服务使用者应用程序和目标 Web 服务并不能与符合 1.0 版规范的使用者应用程序和目标服务进行交互。例如,在 WebSphere Portal Server V5.1 中运行的 J2EE 1.3 Web 服务使用者应用程序无法使用 WS-Security 与在 WebSphere Application Server V6.0 中运行的 J2EE 1.4 服务提供者应用程序进行通信。这个问题不仅限于 IBM 中间件软件堆栈。例如,Microsoft® .NET Web Services Enhancements (WSE) 1.0 也基于 WS-Security 规范的一个草案版本,当尝试在此堆栈与任何基于 WS-Security 1.0 规范的其他堆栈之间进行通信时,会出现相同的问题。

图 1. WS-Security 规范级别不兼容问题
如果遇到这种不兼容的情况,可通过多种方法解决此问题。本文剩下的部分将说明这些选项,并提供了有关如何基于业务需求和技术约束选择恰当的解决方案的指导信息。
为了简单起见,让我们假定 Web 服务使用者应用程序使用 WS-Security 草案 13 规范,而 Web 服务提供者应用程序使用 WS-Security 1.0 规范。注意:此处建议的解决方法也可以应用于相反的场景,即 Web 服务使用者使用 WS-Security 1.0 规范,而 Web 服务提供者使用草案 13 规范时。