第 5 章 WS-Policy Framework


摘要

本章介绍了 WS-Policy 框架的基本概念,定义策略主题和策略断言,并说明如何组合策略断言来制定策略表达式。

5.1. WS-Policy 简介

概述

WS-Policy 规范 提供了应用策略的一般框架,可在 Web 服务应用程序中在运行时修改连接和通信的语义。Apache CXF 安全性使用 WS-Policy 框架来配置消息保护和验证要求。

策略和策略引用

指定策略的最简单方法是直接嵌入您要应用它的位置。例如,要将策略与 WSDL 合同中的特定端口关联,您可以指定它,如下所示:

<wsdl:definitions targetNamespace="http://tempuri.org/"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" ... >
  ...
  <wsdl:service name="PingService10">
    <wsdl:port name="UserNameOverTransport_IPingService" binding="BindingName">
      <wsp:Policy> <!-- Policy expression comes here! --> </wsp:Policy>
      <soap:address location="SOAPAddress"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

指定策略的一种替代方法是,在您要应用该策略时插入策略引用元素 wsp:PolicyReference,然后插入策略元素 wsp:Policy。例如,要使用策略引用将策略与特定端口关联,您可以使用类似如下的配置:

<wsdl:definitions targetNamespace="http://tempuri.org/"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" ... >
  ...
  <wsdl:service name="PingService10">
    <wsdl:port name="UserNameOverTransport_IPingService" binding="BindingName">
      <wsp:PolicyReference URI="#PolicyID"/>
      <soap:address location="SOAPAddress"/>
    </wsdl:port>
  </wsdl:service>
  ...
  <wsp:Policy wsu:Id="PolicyID">
    <!-- Policy expression comes here ... -->
  </wsp:Policy>
</wsdl:definitions>

在策略引用( wsp:PolicyReference )中,使用 ID, PolicyID 来查找引用的策略(请注意在 URI 属性中添加 # 前缀字符)。策略本身( wsp:Policy )必须通过添加属性 wsu:Id="PolicyID" 来识别。

策略主题

与策略关联的实体称为 策略主题。例如,您可以将策略与端点关联,在这种情况下,端点 是策略主题。可以将多个策略与任何给定策略主题关联。WS-Policy 框架支持以下策略主题:

服务策略主题

要将策略与服务关联,请插入 < wsp:Policy&gt; 元素或 <wsp:PolicyReference > 元素作为以下 WSDL 1.1 元素的子元素:

  • WSDL:service- 将策略应用到此服务提供的所有端口(端点)。

端点策略主题

要将策略与端点关联,请插入 &lt ;wsp:Policy& gt; 元素或 < wsp:PolicyReference > 元素作为以下 WSDL 1.1 元素的任何子元素:

  • WSDL:portType- 将策略应用到使用此端口类型的所有端口(端点)。
  • WSDL:binding- 将策略应用到使用此绑定的所有端口。
  • WSDL:port- 仅将策略应用到此端点。

例如,您可以按照以下方式将策略与端点绑定关联(使用策略引用):

<wsdl:definitions targetNamespace="http://tempuri.org/"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" ... >
  ...
  <wsdl:binding name="EndpointBinding" type="i0:IPingService">
    <wsp:PolicyReference URI="#PolicyID"/>
    ...
  </wsdl:binding>
  ...
  <wsp:Policy wsu:Id="PolicyID"> ... </wsp:Policy>
  ...
</wsdl:definitions>

操作策略主题

要将策略与操作关联,请插入 &lt ;wsp:Policy& gt; 元素或 < wsp:PolicyReference > 元素作为以下 WSDL 1.1 元素的任何子元素:

  • wsdl:portType/wsdl:operation
  • wsdl:binding/wsdl:operation

例如,您可以按照以下方式将策略与绑定中的操作关联(使用策略引用):

<wsdl:definitions targetNamespace="http://tempuri.org/"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" ... >
  ...
  <wsdl:binding name="EndpointBinding" type="i0:IPingService">
    <wsdl:operation name="Ping">
      <wsp:PolicyReference URI="#PolicyID"/>
      <soap:operation soapAction="http://xmlsoap.org/Ping" style="document"/>
      <wsdl:input name="PingRequest"> ... </wsdl:input>
      <wsdl:output name="PingResponse"> ... </wsdl:output>
    </wsdl:operation>
    ...
  </wsdl:binding>
  ...
  <wsp:Policy wsu:Id="PolicyID"> ... </wsp:Policy>
  ...
</wsdl:definitions>

消息策略主题

要将策略与消息相关联,请插入 &lt ;wsp:Policy& gt; 元素或 < wsp:PolicyReference > 元素作为以下 WSDL 1.1 元素的任何子元素:

  • wsdl:message
  • wsdl:portType/wsdl:operation/wsdl:input
  • wsdl:portType/wsdl:operation/wsdl:output
  • wsdl:portType/wsdl:operation/wsdl:fault
  • wsdl:binding/wsdl:operation/wsdl:input
  • wsdl:binding/wsdl:operation/wsdl:output
  • wsdl:binding/wsdl:operation/wsdl:fault

例如,您可以按照以下方式将策略与绑定中的消息关联(使用策略引用):

<wsdl:definitions targetNamespace="http://tempuri.org/"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" ... >
  ...
  <wsdl:binding name="EndpointBinding" type="i0:IPingService">
    <wsdl:operation name="Ping">
      <soap:operation soapAction="http://xmlsoap.org/Ping" style="document"/>
      <wsdl:input name="PingRequest">
        <wsp:PolicyReference URI="#PolicyID"/>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="PingResponse"> ... </wsdl:output>
    </wsdl:operation>
    ...
  </wsdl:binding>
  ...
  <wsp:Policy wsu:Id="PolicyID"> ... </wsp:Policy>
  ...
</wsdl:definitions>
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.