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 サービスエンドポイントは、UsernameToken クレデンシャルをマーシャリング/アンマーシャリングします。
  • 実行時に、UsernameToken クレデンシャルが (クライアント側で) 提供されるか、または (サーバー側で) 受信メッセージとして受信される場合、ポリシーアサーションは true を返します。それ以外の場合は、ポリシーアサーションは false を返します。

ポリシーアサーションが false を返す場合、必ずしもエラーが発生するわけではない点に留意したください。特定のポリシーアサーションの net effect は、ポリシーへの挿入方法と、他のポリシーアサーションとどのように組み合わされているかによって異なります。

ポリシーの代替手段

ポリシーは、ポリシーアサーションを使用して構築されます。これは、wsp:Optional 属性および wsp:All 要素と wsp:ExactlyOne 要素のさまざまなネストされた組み合わせを使用して、さらに修飾することができます。これらの要素を作成する net effect は、さまざまな許容 ポリシーの代替手段 を生成することです。これらの許容可能な代替ポリシーのいずれかが満たされている限り、全体的なポリシーも満たされます (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 要素によってラップされる場合は、リスト内のポリシーアサーションの 1 つ以上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「空のポリシー」) です。

例5.1 空のポリシー

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

空の代替ポリシー <wsp:All/> は、ポリシーアサーションを満たす必要のない代替手段を表しています。つまり、常に true を返します。<wsp:All/> を代替手段として使用できる場合は、true のポリシーアサーションがない場合でも、全体的なポリシーを満たすことができます。

null ポリシー

特別なケースは null ポリシー (例: 例5.2「Null ポリシー」) です。

例5.2 Null ポリシー

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

null の代替ポリシー <wsp:ExactlyOne/> は、満たされることがない代替手段を示します。つまり、常に false を返します。

通常の形式

実際には、<wsp:All> 要素および <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> の各行は、有効な代替ポリシーを表します。これらのポリシーの代替のいずれかが満たされると、ポリシー全体が満たされます。