Hitachi

Cosminexus V11 アプリケーションサーバ Webサービスセキュリティ構築ガイド


3.11.1 Webサービスの実装手順

ポリシーを使用したWebサービスの開発の流れを次に示します。

図3‒3 ポリシーを使用したWebサービスの開発

[図データ]

  1. WSDLファイルを作成します。※1

  2. ポリシー記述をコピーします。

  3. WSDLファイルにポリシー記述をインポートします(詳細は「3.11.1(1) ポリシー記述をインポートする」を参照)。

  4. WSDLファイルにポリシー参照を記述して,ポリシー記述内のアサーションとWSDLの要素を関連づけます。

  5. SEIを作成します。※1

  6. ハンドラチェイン設定ファイルをコピーします。※1

  7. Webサービス実装クラスを作成します。

  8. Webサービス実装クラスをコンパイルします。※1

  9. ポリシー記述に対応するWebサービスセキュリティ機能定義ファイルおよびWebサービスセキュリティ方針定義ファイルを作成します(詳細は「3.11.3 定義ファイルの編集」を参照)。

  10. web.xmlおよびapplication.xmlを作成します。※1

  11. EARファイルを作成します。※2

注※1

ポリシーを使用しない場合と共通の手順です。

注※2

ポリシーを使用する場合,EARファイルを作成するときには次のことに注意してください。

  • Webサービスセキュリティ機能定義ファイル,Webサービスセキュリティ方針定義ファイル,およびハンドラチェイン設定ファイルをEARファイルに配置する必要があります。詳細は,「3.10.1 Webサービスの実装手順(WSDL起点)」を参照してください。

  • ポリシー記述を含むメタデータを発行するには,WSDLおよびポリシー記述をWARファイルのWEB-INF/wsdlディレクトリに含める必要があります。詳細はマニュアル「アプリケーションサーバ Webサービス開発ガイド」を参照してください。

〈この項の構成〉

(1) ポリシー記述をインポートする

Webサービスセキュリティ機能では,次のポリシー記述をサポートしています。

表3‒6 サポートしているポリシー記述と格納先ディレクトリ

ポリシー記述

説明

格納先

SignaturePolicy.wsdl

リクエストメッセージおよびレスポンスメッセージの両方に対して,X.509証明書を使用した署名付与/検証機能を使用できます。

<Application Serverのインストールディレクトリ>/wss/policies/signature/

EncryptionPolicy.wsdl

リクエストメッセージおよびレスポンスメッセージの両方に対して,共通鍵暗号AES-128を使用した暗号化/復号化機能を使用できます。

<Application Serverのインストールディレクトリ>/wss/policies/encryption/

AuthenticationPolicy.wsdl

ユーザー名およびダイジェスト形式のパスワードを設定したUsernameToken要素をリクエストメッセージに付与し,通信先にセキュリティトークンを渡すことによって,認証機能が使用できます。

<Application Serverのインストールディレクトリ>/wss/policies/authentication/

Webサービスセキュリティ機能は,これらのポリシー記述をテンプレートとして提供しています。テンプレートの中から必要なポリシー記述を一つだけ選択してコピーし,wsdl:import要素を使用してWSDLファイルにポリシー記述をインポートしてください。インポート例を次に示します。

<wsdl:definitions ・・・>
  <wsdl:import
     namespace="http://cosminexus.com/wss/policy/signature"
     location="SignaturePolicy.wsdl"/>
  ・・・
</wsdl:definitions>
注意事項

ポリシー記述をコピーして使用する場合は,次のことに注意してください。

  • コピーできるポリシー記述は一つです。複数のポリシー記述を組み合わせて利用することはできません。

  • コピーしたポリシー記述は変更しないでください。変更した場合の動作は保証されません。

  • ポリシー記述を含むメタデータを発行したい場合は,ローカルのポリシー記述を相対パスで指定してください。絶対パスで指定すると,ポリシー記述を含むメタデータを発行できません。

次に,Webサービスセキュリティ機能がサポートしているポリシー記述に含まれるアサーションを示します。

表3‒7 アサーション一覧

ポリシー記述

アサーション種別

アサーション名

(wsp:Policy要素のName属性)

SignaturePolicy.wsdl

セキュリティバインディング

http://cosminexus.com/wss/policy/signature#SignaturePolicy

リクエストメッセージのプロテクション

http://cosminexus.com/wss/policy/signature#SignedInputMessagePolicy

レスポンスメッセージのプロテクション

http://cosminexus.com/wss/policy/signature#SignedOutputMessagePolicy

EncryptionPolicy.wsdl

セキュリティバインディング

http://cosminexus.com/wss/policy/encryption#EncryptionPolicy

リクエストメッセージのプロテクション

http://cosminexus.com/wss/policy/encryption#EncryptedInputMessagePolicy

レスポンスメッセージのプロテクション

http://cosminexus.com/wss/policy/encryption#EncryptedOutputMessagePolicy

AuthenticationPolicy.wsdl

サポーティングトークン

http://cosminexus.com/wss/policy/authentication#AuthenticationPolicy

(2) ポリシー参照を追加する

ポリシーを利用するには,wsp:PolicyReference要素を使用してWSDLファイルにポリシー参照の記述を追加し,ポリシー記述のアサーションとWSDLの要素とを関連づける必要があります。

wsp:PolicyReference要素は,次の形式で記述します。

<wsp:PolicyReference URI="参照するアサーション名"/>

アサーション名には,wsp:Policy要素のName属性を指定します。アサーション名(wsp:Policy要素のName属性)の詳細は,表3-7を参照してください。

ポリシー記述に含まれるアサーションは,すべてWSDLの要素から参照される必要があります。wsp:PolicyReference要素を使用した場合に,アサーションを参照するWSDLの要素は次のとおりです。

表3‒8 アサーションを参照するWSDLの要素

WSDLの要素

参照できるアサーションの種別

/wsdl:definitions/wsdl:binding

  • セキュリティバインディング

  • サポーティングトークン

/wsdl:definitions/wsdl:binding/wsdl:operation/wsdl:input

リクエストメッセージのプロテクション

/wsdl:definitions/wsdl:binding/wsdl:operation/wsdl:output

レスポンスメッセージのプロテクション

ポリシー参照の例を次に示します。

<wsdl:definitions
   xmlns:wsp="http://www.w3.org/ns/ws-policy/"
  ・・・>
 
  <wsdl:import
     namespace="http://cosminexus.com/wss/policy/signature"
     location="SignaturePolicy.wsdl"/>
  <wsdl:types>・・・</wsdl:types>
  <wsdl:message ・・・>・・・</wsdl:message>
  ・・・
  <wsdl:portType ・・・>・・・</wsdl:portType>
 
  <!-- バインディング -->
  <wsdl:binding ・・・>
    <wsp:PolicyReference URI="http://cosminexus.com/wss/policy/signature#SignaturePolicy"/>
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <!-- オペレーション -->
    <wsdl:operation ・・・>
      <soap:operation/>
      <!-- リクエストメッセージ -->
      <wsdl:input>
        <wsp:PolicyReference URI="http://cosminexus.com/wss/policy/signature#SignedInputMessagePolicy"/>
        <soap:body use="literal"/>
      </wsdl:input>
      <!-- レスポンスメッセージ -->
      <wsdl:output>
        <wsp:PolicyReference URI="http://cosminexus.com/wss/policy/signature#SignedOutputMessagePolicy"/>
        <soap:body use="literal"/>
      </wsdl:output>
      ・・・
    </wsdl:operation>
  </wsdl:binding>
 
  <wsdl:service ・・・>・・・</wsdl:service>
 
</wsdl:definitions>