着信メッセージの検証と解読
この章では、Caché Web サービスまたは Web クライアントが受信したメッセージでのセキュリティ要素の検証方法 (および暗号化されたコンテンツの自動解読方法) を説明します。以下のトピックについて説明します。
概要
Caché Web サービス、および Web クライアントでは、着信 SOAP メッセージの WS-Security ヘッダ要素の検証、および着信メッセージの自動解読を実行できます。
Caché Web サービスおよび Web クライアントは、署名済みの SAML アサーション・トークンを処理して、シグニチャを検証することもできます。ただし、SAML アサーションの詳細の検証は、アプリケーションで行う必要があります。
セキュリティ・ポリシーを使用している場合、前述のすべてのアクティビティは自動的に行われます。
あらゆるシナリオにおいて、Caché は、ルート権限証明書のコレクションを使用します。“設定およびその他の一般的なアクティビティ” の章を参照してください。
WS-Security ヘッダの検証
着信 SOAP メッセージに記述された WS-Security ヘッダ要素を検証するには、次の操作を実行します。
-
Web サービスまたは Web クライアントで、SECURITYIN パラメータを設定します。以下の値のいずれかを使用します。
-
REQUIRE — Web サービスまたは Web クライアントは、WS-Security ヘッダ要素を検証し、不一致がある場合、またはこの要素が見つからない場合はエラーを出力します。
-
ALLOW — Web サービスまたは Web クライアントは、WS-Security ヘッダ要素を検証します。
いずれの場合も、Web サービスや Web クライアントで、ヘッダ要素 <Timestamp>、<UsernameToken>、<BinarySecurityToken>、<Signature>、および <EncryptedKey> が検証されます。また、ヘッダの SAML アサーションに WS-Security シグニチャが存在する場合は、これも検証されます。必要に応じてメッセージの解読も実行されます。
検証に失敗すると、エラーが返されます。
テストおよびトラブルシューティングに使用する SECURITYIN パラメータには、この他に以下の 2 つの値も設定できます。
-
IGNORE — Web サービスまたは Web クライアントは、“CSP 認証と WS-Security” の説明のように <UsernameToken> 以外の WS-Security ヘッダ要素を無視します。
後方互換性のために、この値が既定値です。
-
IGNOREALL — Web サービスまたは Web クライアントは、WS-Security ヘッダ要素をすべて無視します。
-
使用例は、このドキュメントで前述の “メッセージの暗号化の例” を参照してください。
SECURITYIN パラメータは、関連付けられた (そしてコンパイルされた) 構成クラスにセキュリティ・ポリシーがある場合、無視されます。
WS-Security ヘッダの SAML アサーションへのアクセス
WS-Security ヘッダ要素に <Assertion> 要素が記述されている場合、Caché の Web サービスまたは Web クライアントでは、その SAML アサーションのシグニチャを自動的に検証します (シグニチャが署名されている場合)。
ただし、アサーションは自動的には検証しません。コードでアサーションを取得し、これを検証する必要があります。
SAML アサーションにアクセスするには、セキュリティ・ヘッダ要素の <Assertion> 要素を見つけます。そのためには、次のように、サービスまたはクライアントの SecurityIn プロパティの FindElement() メソッドを使用します。
Set assertion=..SecurityIn.FindElement("Assertion")
これにより %SAML.AssertionOpens in a new tab のインスタンスが返されます。必要に応じてこのオブジェクトのプロパティを検証します。
CSP 認証と WS-Security
Caché Web サービスでは、CSP エンジンと Web サービスの 2 種類の機能が有効であることを認識しておくと役立ちます。
-
管理ポータルで、Web アプリケーションに許可される認証モードを指定します。(詳細は、このドキュメントで前述の “タイムスタンプおよびユーザ名トークンの例” を参照してください。)[パスワード] オプションを選択すると、Web アプリケーションで Caché のユーザ名とパスワードのペアを受け入れることができます。
-
これとは別に、Web サービスで Caché のユーザ名とパスワードのペアを要求することもできます。
この両機能は以下のように連携して機能します。
-
メッセージの受信時に Caché Web サービスでは、<Security> と呼ばれるヘッダ要素の存在がチェックされます。ただし、この要素の内容は調べられません。
-
<Security> ヘッダ要素が存在せず、SECURITYIN パラメータが REQUIRE である場合、Web サービスは、フォルトを出力して終了します。
-
<Security> ヘッダ要素に <UsernameToken> 要素がある場合は、以下のように処理されます。
-
Web アプリケーションに対して [パスワード] オプションを選択した場合、Web サービスは、Caché にログインするよう CSP エンジンに指示します。ログインは、CSP ページの場合と同じ方法で実行されます。Caché は、<UsernameToken> 要素によって指定されるユーザ名とパスワードを使用します。
Web サービスは、SECURITYIN パラメータの任意の値 (IGNOREALL を除く) に対してこれを実行します。
ユーザ名は、$USERNAME 特殊変数と Web サービスの Username プロパティで使用できます。パスワードは使用できません。
-
[パスワード] オプションを選択しない場合、ログインは行われません。
-
SECURITYIN パラメータは、関連付けられた (そしてコンパイルされた) 構成クラスにセキュリティ・ポリシーがある場合、無視されます。
セキュリティ・ヘッダ要素の取得
場合によっては、WS-Security ヘッダ要素のカスタム処理を追加する必要があることもあります。そのためには、Web サービスまたは Web クライアントの SecurityIn プロパティを使用します。サービスまたはクライアントが WS-Security ヘッダ要素を受信した場合、このプロパティは、このヘッダ要素を含む %SOAP.Security.HeaderOpens in a new tab のインスタンスになります。以下はその例です。
Set secheader=myservice.SecurityIn
そして、そのインスタンスの次のメソッドのいずれかを使用して、ヘッダ要素を取得します。
method FindByEncryptedKeySHA1(encryptedKeySHA1 As %Binary) as %SOAP.Security.Element
指定の EncryptedKeySHA1 引数に対応する <EncryptedKey> 要素からキーを返します。または、一致するものがない場合は、空の文字列を返します。
method FindElement(type As %String, ByRef pos As %String) as %SOAP.Security.Element
位置 pos の後で、指定されたタイプの最初のセキュリティ要素を返します。一致するものがない場合、メソッドは空の文字列を返します (pos を 0 として返します)。
type には、"Timestamp"、"BinarySecurityToken"、"UsernameToken"、"Signature"、または "EncryptedKey" を指定します。
method FindLastElement(type As %String, ByRef pos As %String) as %SOAP.Security.Element
指定のタイプの最後のセキュリティ要素を返します。一致するものがない場合、メソッドは空の文字列を返します (pos を 0 として返します)。
type の詳細は、FindElement() のエントリを参照してください。
これらすべてのメソッドは、要素タイプに応じて、%SOAP.Security.ElementOpens in a new tab のインスタンスまたは以下のサブクラスのインスタンスのいずれかを返します。
要素タイプ | 使用されるサブクラス |
---|---|
"Timestamp" | %SOAP.Security.TimestampOpens in a new tab |
"BinarySecurityToken" | %SOAP.Security.BinarySecurityTokenOpens in a new tab |
"UsernameToken" | %SOAP.Security.UsernameTokenOpens in a new tab |
"Signature" | %XML.Security.SignatureOpens in a new tab |
詳細は、クラスリファレンスを参照してください。
シグニチャの確認のチェック
WS-Security 1.1 <SignatureConfirmation> 機能は、受信した SOAP メッセージが、Web クライアントによって送信された元の要求への応答で生成されたことを、Web クライアントが確認できるようにします。クライアント要求は通常、署名されますが、署名は必須ではありません。このメカニズムでは、Web サービスは、セキュリティ・ヘッダ要素に <SignatureConfirmation> 要素を追加し、Web クライアントは、その <SignatureConfirmation> 要素を検証できます。
Web クライアントの場合、Web サービスから受信した応答内の <SignatureConfirmation> 要素を検証するには、Web クライアントの WSCheckSignatureConfirmation() メソッドを呼び出します。このメソッドは、<SignatureConfirmation> 要素が有効な場合は true を、それ以外の場合は false を返します。
Web サービスが送信するメッセージにシグニチャの確認を追加する方法については、このドキュメントで前述の “シグニチャの確認の追加” を参照してください。