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>
の各行は、有効な代替ポリシーを表します。これらのポリシーの代替のいずれかが満たされると、ポリシー全体が満たされます。