Web Service 安全性 API 编程模型

应用程序服务器编程模型提供 Web Service 安全性编程应用程序编程接口 (WSS API) 保护 SOAP 消息。

API 编程模型是基于界面的编程模型,即基于 Web Service 安全性 V1.1 标准,但是设计还包括对保护 SOAP 消息的 Web Service 安全性 V1.0 的支持。WSS API 编程模型实现是一个简化的版本,它基于 JSR-183 的早期草稿建议,该建议是用于对 Web Service 安全性的 Java™ API 绑定进行定义的 JSR。由于应用程序代码面向接口编程,因此在设计上,使用开放式源代码实现进行编程的任何应用程序代码应进行很小的改动或根本不需要改动就能够在 WebSphere® Application Server 上运行。

Web Service 的配置模型也已从部署描述符模型重新设计为策略集模型。使用通过管理控制台来配置的策略集,或者通过对配置使用 WSS API,可以启用 Web Service 安全性。策略集配置提供的功能与 Web Service 安全性运行时的 WSS API 所支持的功能相同。但是,使用策略集定义的安全策略的优先级要高于 WSS API 的优先级。在应用程序中同时使用 WSS API 和策略集时,缺省行为适用于来自要执行的策略集和要忽略的 WSS API 的安全策略。要在应用程序中使用 WSS API,必须确保此应用程序或应用程序资源未连接任何策略集,或者必须确保连接策略集中没有任何安全策略。

您仍可将现有的 JAX-RPC 应用程序用于 Web Service 安全性;但这些应用程序无法使用 Web Service 安全性 V1.1 功能,例如使用策略集配置安全策略、OM 过滤器性能改进、WSS API、Web Services Secure Conversation (WS-SecureConversation)、Kerberos 令牌和关联的消息保护和标识传播 SHA-1 密钥,以及 Web Services Trust (WS-Trust) 功能。

要使用 Web Service 安全性 V1.1 功能,您必须重新编写现有的 JAX-RPC 应用程序为 JAX-WS 应用程序,手动重新配置策略集的安全性约束,并执行从基于 DOM SPI 到基于 OM SPI 的迁移。

例如,使用 JAX-WS 编程模型时,改进后的可插入令牌框架设计允许将相同的安全实现用于 API 和策略集。框架使用令牌创建和令牌验证的 JAAS 登录模块和 JAAS 回调处理程序。

下图说明编程模型之间的差别。

图 1. 使用 JAX-WS 编程模型的可插入令牌体系结构
使用 JAX-WS 编程模型的可插入令牌体系结构
图 2. 使用 JAX-RPC 编程模型的可插入令牌体系结构
使用 JAX-RPC 编程模型的可插入令牌体系结构

使用 WSS API 时支持的内容

WSS API 只能在客户机上使用。您可以使用 Java SE 6 客户机、J2EE 应用程序客户机或者服务器客户机(作为客户机的服务提供程序),这些客户机使用 API 保护安全性为消息级别的 SOAP 消息。

应了解 Web Service 安全性 (WSS) 才能使用 WSS API。使用 WSS API 之前,请记住 WSS API:
  • 是基于 Java 的接口。
  • 是使用工厂模型 (WSSFactory) 实现的。
  • 支持 WS-Security V1.0 和 1.1 标准,包括用户名令牌概要文件和 X.509 令牌概要文件 V1.0 和 V1.1。
  • 比较以 XML 为中心。
  • 包括简化 API 的面向对象的设计。
  • 是面向任务的,允许一般使用方案,例如:签署正文和加密 SOAP 消息主体内容。
  • 非常灵活且可扩展,它们使您能够扩展令牌类型支持。
  • 基于提供程序框架,允许使用不同的数据模型,例如:AXIOM 或 DOM。
  • 为应用程序员提供在其应用程序中应用 WSS 的更好控制和更多灵活性。

WSS API 的缺省值是预定义的,而且包含在 Web Service 安全性运行时中。提供了以下项的缺省值:

  • 时间戳记的持续时间
  • 签署算法、规范化算法、摘要方法、变换算法、安全性令牌引用方法和已签署部件(例如 SOAP 正文)、Web Service 寻址头和时间戳记。
  • 密钥加密算法、数据加密算法、安全性令牌引用方法和加密的部件(例如 SOAP 正文内容)。

签名验证的缺省值与签名(签署信息)的缺省值类似。类似地,解密的缺省值与加密的缺省值类似。

使用 WSS API 时不受支持的内容

和应用程序服务器一起提供的 WSS API 不支持以下功能:

  • 应用程序编程模型为 JAX-WS,这意味着 JAX-RPC (JSR-109) 应用程序不受支持。
  • WSS API 可在进行 JAX-WS 客户机应用程序的同步消息交换时使用。但是,异步客户机不支持 WSS API。
  • WSS API 支持仅可用于请求者,不可用于提供程序。
  • 身份断言语义编程模型在 WSS API 中不受支持,因为身份断言不是 Web Service 安全性 V1.0 标准的一部分。但是,您可以使用 WSS API 来在令牌处理过程中添加身份断言语义。

WS-Trust 和 WS-SecureConversation 方案

保护 WS-Trust SOAP 消息有以下几种方法:
  • 使用策略集中定义的引导程序策略。
  • 使用 WSS API,它支持 WS-SecureConversation。
  • 启用提供程序的动态策略,这样客户机可以检索提供程序端运行时策略。

应用程序将使用 WSS API 来获取用于基于 API 的程序化安全对话的安全上下文令牌。WebSphere Application Server 信任服务提供应用程序请求访问服务的安全性令牌功能。信任服务的范围和焦点只适用于 WS-SecureConversation 的 WebSphere Application Server 安全上下文令牌 (SCT)。

WS-SecureConversation 和 WS-Trust 方案着重于互操作性功能,例如各种组件的配置和运行时交互。将使用 WSS API 来保护引导 RST 和 RSTR 以从信任服务获得安全上下文令牌。获得安全上下文令牌后,就可使用 WSS API 创建派生的密钥令牌。然后可将该派生的密钥令牌用于签名和加密。

在两种情况下会使用 WSS API 来保护使用 Web Service 安全性的 SOAP 消息:
  • 生成安全 SOAP 消息,它在请求生成者应用程序代码中。
  • 使用受保护的 SOAP 消息,它在响应用户用户应用程序代码中。

两种情况下,如果遇到错误,那么提供 Java 异常类 com.ibm.websphere.wssecurity.wssapi.WSSException。

Web Service 客户机安全上下文

当 JAX-WS 客户机调用 Web Service 时,安全处理程序构造的当前安全上下文被存储在 RequestContext 对象中。缺省情况下,重新构造下一次 Web Service 请求调用的 JAX-WS Web Service 客户机运行时环境中的安全上下文。您可以保存安全上下文用于随后的 Web Service 调用。例如,安全策略要求客户机使用用户名和密码发送用户名安全性令牌。当客户机发送第一个请求调用服务时,会提示您输入必要的用户名和密码。用户名和密码保存在安全上下文 Subject 的 Username SecurityToken 令牌中。为避免在随后的请求调用中再次提示输入用户名和密码,您可以保存安全上下文。有两种方法保存安全上下文:1) 配置客户机运行时自动保存客户机安全上下文,用于随后的请求调用;或 2) 手动保存安全上下文。

要配置 JAX-WS 客户机运行时环境自动保存安全上下文,请将 Java 系统属性 com.ibm.websphere.wssecurity.context.management 设置为 true。 此系统属性为 true 时,JAX-WS 客户机自动复制安全处理程序构造的安全上下文到 RequestContext,上下文用于后续的请求调用。

要手动保存安全上下文,请使用以下样本代码:
// First request
Service svc = Service.create(...);
svc.addPort(...);
Dispatch<String> dispatch = svc.createDispatch(...);
Map<String, Object> requestContext = dispatch.getRequestContext();
String response = dispatch.invoke(body.toString());

Object securityContext = requestContext.get(com.ibm.wsspi.websvcs.Constants.WEBSPHERE_SECURITY_CONTEXT);

// Subsequent request

Dispatch<String> dispatch = svc.createDispatch(...);
Map<String, Object> requestContext = dispatch.getRequestContext();
Object securityContext = requestContext.put(com.ibm.wsspi.websvcs.Constants.WEBSPHERE_SECURITY_CONTEXT, securityContext);

指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwbs_wss_api
文件名:cwbs_wss_api.html