7.2. 認証ポリシーの指定
概要
エンドポイントで認証をサポートする場合は、サポートトークンポリシーアサーション を関連するエンドポイントバインディングに関連付けます。サポートトークンポリシーアサーションにはいくつかの異なる種類があり、その要素はすべてフォーム *SupportingTokens
の名前を持っています (SupportingTokens
、SignedSupportingTokens
など)。完全なリストについては、「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:AlgorithmSuite
、sp:SignedParts
、sp:SignedElements
、sp: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
属性の有効な値は以下のとおりです。
- なし
トークンは、開始者と受信者の間で送信されるメッセージに含まれていてはなりません。むしろ、トークンへの外部参照を使用する必要があります。有効な URI 値は以下のとおりです。
1.2
http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never
1.1
http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never
- Once
イニシエーターから受信側に送信される 1 つのメッセージにのみトークンを含める必要があります。トークンへの参照は、内部参照メカニズムを使用できます。受信者とイニシエーター間で送信された後続の関連するメッセージは、外部参照メカニズムを使用してトークンを参照する場合があります。有効な URI 値は以下のとおりです。
1.2
http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Once
1.1
http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Once
- AlwaysToRecipient
トークンは、開始者から受信者に送信されるすべてのメッセージに含まれている必要があります。トークンは、受信者からイニシエーターに送信されるメッセージに含まれていてはなりません。有効な URI 値は以下のとおりです。
1.2
http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient
1.1
http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient
- AlwaysToInitiator
トークンは、受信者から開始者に送信されるすべてのメッセージに含まれている必要があります。イニシエーターから受信者に送信されたメッセージにトークンを含めることはできません。有効な URI 値は以下のとおりです。
1.2
http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToInitiator
1.1
http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToInitiator
- Always
イニシエーターと受信者の間に送信されるすべてのメッセージにトークンを含める必要があります。これがデフォルトの動作です。有効な URI 値は以下のとおりです。
1.2
http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Always
1.1
http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Always
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
このポリシーは、トークンの整合性と機密性を保証するためにトークンに署名して暗号化する必要があることを除いて、サポートトークンポリシーの承認と同じです。