5.2. 策略表达式


概述

通常,wsp:Policy 元素由多个不同的策略设置组成(其中单个策略设置指定为 策略断言)。因此,wsp:Policy 元素定义的策略实际上是一个复合对象。wsp:Policy 元素的内容称为 策略表达式,策略表达式由基本策略断言的各种逻辑组合组成。通过定制策略表达式的语法,您可以确定在运行时必须满足哪些策略断言组合才能满足策略整体。

本节论述了策略表达式的语法和语义详情。

策略断言

策略断言是基本构建块,可以组合生成策略。策略断言有两个关键特征:它为策略主题添加基本功能单元,它代表在运行时评估的布尔值断言。例如,请考虑以下策略断言,它要求使用请求消息传播 WS-Security 用户名令牌:

<sp:SupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
  <wsp:Policy>
    <sp:UsernameToken/>
  </wsp:Policy>
</sp:SupportingTokens>

与端点策略主题关联时,此策略断言具有以下效果:

  • Web 服务端点 marshales/unmarshals UsernameToken 凭证。
  • 在运行时,策略断言会返回 true,如果提供了 UsernameToken 凭据(在客户端一中)或在传入消息(服务器端)中接收,策略断言会返回 false

请注意,如果策略断言返回 false,这不一定会导致错误。特定策略断言的 net effect 取决于它如何插入到策略中,以及它如何与其他策略断言相结合。

策略替代方案

策略是使用策略断言构建的,也可以使用 wsp:Optional 属性以及 wsp:Allwsp:ExactlyOne 元素的各种嵌套组合进行授权。制作这些元素的网络效果是生成一系列可接受的 策略替代方案。只要满足这些可接受的策略替代方案之一,整个策略也会被取消处理(等同于 true)。

wsp:All 元素

当策略断言列表被 wsp:All 元素嵌套时,列表中的所有策略断言都必须评估为 true例如,请考虑以下身份验证和授权策略断言的组合:

<wsp:Policy wsu:Id="AuthenticateAndAuthorizeWSSUsernameTokenPolicy">
  <wsp:All>
    <sp:SupportingTokens>
      <wsp:Policy>
        <sp:UsernameToken/>
      </wsp:Policy>
    </sp:SupportingTokens>
    <sp:SupportingTokens>
      <wsp:Policy>
        <sp:SamlToken/>
      </wsp:Policy>
    </sp:SupportingTokens>
  </wsp:All>
</wsp:Policy>

如果满足以下条件,则前面的策略对特定的传入请求 满意

  • WS-Security UsernameToken 凭证必须存在; 以及
  • 必须存在 SAML 令牌。
注意

wsp:Policy 元素完全等同于 wsp:All。因此,如果您从上例中删除了 wsp:All 元素,您将获得一个语义相同的示例

wsp:ExactlyOne 元素

当策略断言列表被 wsp:ExactlyOne 元素嵌套时,列表 中至少有一个 策略断言必须评估为 true。运行时会遍历列表,评估策略断言,直到找到返回 true 的策略断言。此时,会满足 wsp:ExactlyOne 表达式(返回 true),并且列表中任何剩余的策略断言都不会被评估。例如,请考虑以下验证策略断言的组合:

<wsp:Policy wsu:Id="AuthenticateUsernamePasswordPolicy">
  <wsp:ExactlyOne>
    <sp:SupportingTokens>
      <wsp:Policy>
        <sp:UsernameToken/>
      </wsp:Policy>
    </sp:SupportingTokens>
    <sp:SupportingTokens>
      <wsp:Policy>
        <sp:SamlToken/>
      </wsp:Policy>
    </sp:SupportingTokens>
  </wsp:ExactlyOne>
</wsp:Policy>

如果以下条件之一,则前面的策略会满足特定的传入请求:

  • WS-Security UsernameToken 凭证存在; 或者
  • 存在 SAML 令牌。

请注意,特别是,如果两个 凭证类型都存在,则在评估其中一个断言后,会满足该策略,但没有保证实际上评估了哪些策略断言。

空策略

特殊情况是 空策略,一个在 例 5.1 “Empty 策略” 中显示的示例。

例 5.1. Empty 策略

<wsp:Policy ... >
   <wsp:ExactlyOne>
      <wsp:All/>
   </wsp:ExactlyOne>
</wsp:Policy>

在空策略替代方案 &lt ;wsp:All/& gt; 中,代表不需要满足策略断言的替代方法。换句话说,它总是返回 true。当 <wsp:All /> 作为替代方案时,即使没有策略断言为 true,也可以全部策略。

null 策略

特殊情况是 null 策略,这是一个在 例 5.2 “Null 策略” 中显示的示例。

例 5.2. Null 策略

<wsp:Policy ... >
   <wsp:ExactlyOne/>
</wsp:Policy>

其中 null 策略替代方案 & lt;wsp:ExactlyOne /> 代表一个永不满足的替代选择。换句话说,它总是返回 false

普通形式

在实践中,通过嵌套 &lt ;wsp:All & gt; 和 <wsp:ExactlyOne > 元素,您可以生成相当复杂的策略表达式,其策略替代方案可能很难退出。为便于比较策略表达式,WS-Policy 规格定义了策略表达式的规范或规范 形式,以便您可以不清地读取策略替代列表。每个有效的策略表达式都可以减少为普通形式。

通常,普通形式策略表达式符合 例 5.3 “普通表单语法” 中显示的语法。

例 5.3. 普通表单语法

<wsp:Policy ... >
   <wsp:ExactlyOne>
        <wsp:All> <Assertion .../> ... <Assertion .../> </wsp:All>
        <wsp:All> <Assertion .../> ... <Assertion .../> </wsp:All>
        ...
   </wsp:ExactlyOne>
</wsp:Policy>

其中每行 < wsp:All>…​</wsp:All& gt; 代表有效的策略替代方案。如果满足其中一项策略备选方案,则整个政策将满足。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.