7.2. 認証ポリシーの指定

概要

エンドポイントで認証をサポートする場合は、サポートトークンポリシーアサーション を関連するエンドポイントバインディングに関連付けます。サポートトークンポリシーアサーションにはいくつかの異なる種類があり、その要素はすべてフォーム *SupportingTokens の名前を持っています (SupportingTokensSignedSupportingTokens など)。完全なリストについては、「SupportingTokens アサーション」 を参照してください。

サポートトークンアサーションをエンドポイントに関連付けると、次のような効果があります。

  • エンドポイントとのメッセージのやりとりには、指定されたトークンタイプを含む必要があります (トークンの方向は sp:IncludeToken 属性が指定)。
  • 使用する特定タイプのトークン要素に応じて、エンドポイントはトークンに署名または暗号化する必要がある場合があります。

サポートされるトークンアサーションは、ランタイムがこれらの要件を満たしていないことを確認することを意味します。しかし、WS-SecurityPolicy ポリシーはランタイムにクレデンシャルを提供するメカニズムを定義しません。クレデンシャルを指定するには、ブループリント XML 設定を使用する必要があります (「クライアント認証情報の指定」)。

構文

*SupportingTokens 要素 (つまり、SupportingTokens 接尾辞のあるすべての要素—「SupportingTokens アサーション」 を参照) には、以下の構文があります。

<sp:SupportingTokensElement xmlns:sp="..." ... >
  <wsp:Policy xmlns:wsp="...">
    [Token Assertion]+
    <sp:AlgorithmSuite ... > ... </sp:AlgorithmSuite> ?
    (
      <sp:SignedParts ... > ... </sp:SignedParts> |
      <sp:SignedElements ... > ... </sp:SignedElements> |
      <sp:EncryptedParts ... > ... </sp:EncryptedParts> |
      <sp:EncryptedElements ... > ... </sp:EncryptedElements> |
    ) *
    ...
  </wsp:Policy>
  ...
</sp:SupportingTokensElement>

SupportingTokensElement はサポートトークン要素の 1 つである *SupportingTokens を表します。通常、セキュリティーヘッダーに 1 つ (または複数) のトークンを含むだけの場合は、1 つ以上のトークンアサーション [Token Assertion] をポリシーに含めます。特に、これは認証に必要なすべてです。

トークンが適切なタイプ (たとえば、X.509 証明書または対称鍵) である場合、理論的には、sp:AlgorithmSuitesp:SignedPartssp:SignedElementssp:EncryptedParts、および sp:EncryptedElements 要素を使用して、現在のメッセージの特定の部分に署名または暗号化するためにトークンを使用することもできます。ただし、この機能は現在 ApacheCXF ではサポートされて いません

サンプルポリシー

例7.1「サポートトークンポリシーの例」 は、セキュリティーヘッダーに WS-Security UsernameToken トークン (ユーザー名/パスワードの資格情報を含む) を含める必要があるポリシーの例を示しています。また、トークンは sp:SignedSupportingTokens 要素内で指定されるので、このポリシーではトークンは署名される必要があります。この例ではトランスポートバインディングを使用しているため、メッセージへの署名を担当するのは基盤となるトランスポートです。

たとえば、基盤となるトランスポートが HTTPS の場合、SSL/TLS プロトコル (適切なアルゴリズムスイートで設定されている) が、指定されたトークンを含むセキュリティーヘッダーを含むメッセージ 全体 に署名します。これは、サポートトークンが署名されているという要件を満たすのに十分です。

例7.1 サポートトークンポリシーの例

<wsp:Policy wsu:Id="UserNameOverTransport_IPingService_policy">
  <wsp:ExactlyOne>
    <wsp:All>
      <sp:TransportBinding> ... </sp:TransportBinding>
      <sp:SignedSupportingTokens
          xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
        <wsp:Policy>
          <sp:UsernameToken
              sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
            <wsp:Policy>
              <sp:WssUsernameToken10/>
            </wsp:Policy>
          </sp:UsernameToken>
        </wsp:Policy>
      </sp:SignedSupportingTokens>
      ...
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

sp:WssUsernameToken10 サブ要素の存在は、UsernameToken ヘッダーが WS-Security UsernameToken 仕様のバージョン 1.0 に準拠する必要があることを示しています。

トークンタイプ

原則として、サポートするトークンアサーションで任意の WS-SecurityPolicy トークンタイプを指定できます。しかし、SOAP レベルの認証の場合、sp:UsernameToken トークンタイプだけが関連しています。

sp:UsernameToken

サポートトークンアサーションのコンテキストでは、この要素は、WS-SecurityUsernameToken がセキュリティー SOAP ヘッダーに含まれることを指定します。基本的に、WS-Security UsernameToken は、WS-SecuritySOAP ヘッダーでユーザー名/パスワードの資格情報を送信するために使用されます。sp:UsernameToken 要素の構文は以下のようになります。

<sp:UsernameToken sp:IncludeToken="xs:anyURI"? xmlns:sp="..." ... >
  (
    <sp:Issuer>wsa:EndpointReferenceType</sp:Issuer> |
    <sp:IssuerName>xs:anyURI</sp:IssuerName>
  ) ?
  <wst:Claims Dialect="..."> ... </wst:Claims> ?
  <wsp:Policy xmlns:wsp="...">
    (
      <sp:NoPassword ... /> |
      <sp:HashPassword ... />
    ) ?
    (
      <sp:RequireDerivedKeys /> |
      <sp:RequireImpliedDerivedKeys ... /> |
      <sp:RequireExplicitDerivedKeys ... />
    ) ?
    (
      <sp:WssUsernameToken10 ... /> |
      <sp:WssUsernameToken11 ... />
    ) ?
    ...
  </wsp:Policy>
  ...
</sp:UsernameToken>

sp:UsernameToken のサブ要素はすべてオプションで、通常の認証では必要ありません。通常、この構文で唯一関連する部分は sp:IncludeToken 属性です。

注記

現在、sp:UsernameToken 構文では、sp:WssUsernameToken10 サブ要素のみが Apache CXF でサポートされています。

sp:IncludeToken 属性

sp:IncludeToken の値は、エンクロージングポリシーの WS-SecurityPolicy バージョンと一致する必要があります。現在のバージョンは 1.2 ですが、レガシー WSDL はバージョン 1.1 を使用する場合があります。sp:IncludeToken 属性の有効な値は以下のとおりです。

Never

トークンは、開始者と受信者の間で送信されるメッセージに含まれていてはなりません。むしろ、トークンへの外部参照を使用する必要があります。有効な URI 値は以下のとおりです。

Once

イニシエーターから受信側に送信される 1 つのメッセージにのみトークンを含める必要があります。トークンへの参照は、内部参照メカニズムを使用できます。受信者とイニシエーター間で送信された後続の関連するメッセージは、外部参照メカニズムを使用してトークンを参照する場合があります。有効な URI 値は以下のとおりです。

AlwaysToRecipient

トークンは、開始者から受信者に送信されるすべてのメッセージに含まれている必要があります。トークンは、受信者からイニシエーターに送信されるメッセージに含まれていてはなりません。有効な URI 値は以下のとおりです。

AlwaysToInitiator

トークンは、受信者から開始者に送信されるすべてのメッセージに含まれている必要があります。イニシエーターから受信者に送信されたメッセージにトークンを含めることはできません。有効な URI 値は以下のとおりです。

Always

イニシエーターと受信者の間に送信されるすべてのメッセージにトークンを含める必要があります。これがデフォルトの動作です。有効な URI 値は以下のとおりです。

SupportingTokens アサーション

次の種類のサポートトークンアサーションがサポートされています。

sp:SupportingTokens

この要素は、指定されたタイプのトークン (単数または複数) を wsse:Security ヘッダーに含める必要があります。追加要件はありません。

警告

このポリシーでは、トークンを明示的に署名したり暗号化したりする必要はありません。ただし、通常、署名および暗号化によりトークンを保護することが必須となります。

sp:SignedSupportingTokens

この要素は、指定されたタイプのトークン (単数または複数) を wsse:Security ヘッダーに含める必要があります。さらに、このポリシーではトークンの整合性を確保するために、トークンに署名されている必要があります。

警告

このポリシーでは、トークンを明示的に暗号化する必要はありません。ただし、通常、署名と暗号化の両方でトークンを保護する必要があります。

sp:EncryptedSupportingTokens

この要素は、指定されたタイプのトークン (単数または複数) を wsse:Security ヘッダーに含める必要があります。さらに、このポリシーでは、トークンの機密性を保証するために、トークンを暗号化する必要があります。

警告

このポリシーは、トークンを明示的に署名する必要はありません。ただし、通常、署名と暗号化の両方でトークンを保護する必要があります。

sp:SignedEncryptedSupportingTokens

この要素は、指定されたタイプのトークン (単数または複数) を wsse:Security ヘッダーに含める必要があります。さらに、このポリシーでは、トークンの整合性と機密性を保証するために、トークンが署名および暗号化の両方である必要があります。

sp:EndorsingSupportingTokens

承認サポートトークンは、メッセージ署名 (プライマリー署名) に署名するために使用されます。この署名は、承認署名 または 二次署名 と呼ばれます。したがって、承認サポートトークンポリシーを適用することにより、一連の署名を作成できます。メッセージ自体に署名するプライマリー署名と、プライマリー署名に署名するセカンダリー署名です。

注記

トランスポートバインディング (HTTPS など) を使用している場合、メッセージ署名は実際には SOAP メッセージの一部ではないため、この場合はメッセージ署名に署名することはできません。トランスポートバインディングを使用してこのポリシーを指定すると、承認トークンが代わりにタイムスタンプに署名します。

警告

このポリシーでは、トークンを明示的に署名したり暗号化したりする必要はありません。ただし、通常、署名および暗号化によりトークンを保護することが必須となります。

sp:SignedEndorsingSupportingTokens

このポリシーは、トークンの整合性を保証するためにトークンに署名する必要があることを除いて、サポートトークンポリシーの承認と同じです。

警告

このポリシーでは、トークンを明示的に暗号化する必要はありません。ただし、通常、署名と暗号化の両方でトークンを保護する必要があります。

sp:EndorsingEncryptedSupportingTokens

このポリシーは、トークンの機密性を保証するためにトークンを暗号化する必要があることを除いて、サポートトークンポリシーの承認と同じです。

警告

このポリシーは、トークンを明示的に署名する必要はありません。ただし、通常、署名と暗号化の両方でトークンを保護する必要があります。

sp:SignedEndorsingEncryptedSupportingTokens

このポリシーは、トークンの整合性と機密性を保証するためにトークンに署名して暗号化する必要があることを除いて、サポートトークンポリシーの承認と同じです。