セキュリティ要素の手動追加
このトピックでは、InterSystems IRIS Web サービスおよび InterSystems IRIS Web クライアントによって送信されるメッセージにセキュリティ要素を手動で追加する一般的な方法について説明します。
以下の各トピックでは、特定のセキュリティ・タスクの詳細について説明します。
セキュリティ・ヘッダ要素の追加
WS-Security ヘッダ要素にセキュリティ要素を追加するには、Web クライアントまたは Web サービスで以下の一般的な手順を実行します。
-
該当するクラスのインスタンスを作成します。そのためには、そのクラスに応じて Create() または CreateX509() という名前のメソッドを使用します。このインスタンスは、<Username> や <EncryptedKey> などの WS-Security ヘッダ要素の 1 つを表します。
-
Web クライアントまたは Web サービスの SecurityOut プロパティを更新して、各インスタンスを WS-Security ヘッダ要素に追加します。これには、AddSecurityElement() メソッドを呼び出します。
-
SOAP メッセージを送信します。メッセージにWS-Security ヘッダが組み込まれ、ヘッダには追加した要素が含まれます。
-
以降の発信メッセージは、次のようになります。
-
Web クライアントの場合、SecurityOut プロパティは変更されず、このインスタンスからの以降の発信メッセージには、追加したセキュリティ・ヘッダが含まれます。これが適切でない場合は、SecurityOut プロパティを NULL に設定します。
-
Web サービスの場合、SecurityOut プロパティは、最初の発信 SOAP メッセージの後で、自動的に NULL に設定されます。
-
ヘッダ要素の順序
複数のセキュリティ要素をヘッダに追加する場合、セキュリティ・ヘッダ要素を適切な順序で追加することが重要になります。同じメッセージ要素の暗号化と署名の両方を実行する場合、これは特に重要です。つまり、暗号化処理と署名処理を実行するのと同じ順序でこれらを追加します。
ヘッダ要素の順序は、メッセージの処理が行われる順序を示します。WS-Security 1.1 仕様では、このことを以下のように規定しています。
As elements are added to a <wsse:Security> header block, they SHOULD be prepended to the existing elements. As such, the <wsse:Security> header block represents the signing and encryption steps the message producer took to create the message. This prepending rule ensures that the receiving application can process sub-elements in the order they appear in the <wsse:Security> header block, because there will be no forward dependency among the sub- elements.
ヘッダ要素を追加すると、InterSystems IRIS は、前に追加した要素の先頭に各要素を追加します。ただし、以下の例外があります。
-
<Timestamp> 要素を含める場合は、この要素が最初になるよう強制されます。
-
<BinarySecurityToken> 要素を含める場合は、この要素が <Timestamp> 要素 (含まれている場合) の後、または最初になるよう強制されます。
-
AddSecurityElement() を使用して暗号化されたセキュリティ・ヘッダ要素を追加する場合は、2 番目の引数を指定して、挿入する <EncryptedData> 要素が、関連付けられた <EncryptedKey> 要素の後になるよう強制します。
同じメッセージ要素の暗号化と署名の両方を実行する場合、セキュリティ・ヘッダ要素を適切な順序で追加することが特に重要です。つまり、暗号化処理と署名処理を実行するのと同じ順序でこれらを追加します。