3.11.1 Webサービスの実装手順
ポリシーを使用したWebサービスの開発の流れを次に示します。
-
WSDLファイルを作成します。※1
-
ポリシー記述をコピーします。
-
WSDLファイルにポリシー記述をインポートします(詳細は「3.11.1(1) ポリシー記述をインポートする」を参照)。
-
WSDLファイルにポリシー参照を記述して,ポリシー記述内のアサーションとWSDLの要素を関連づけます。
-
SEIを作成します。※1
-
ハンドラチェイン設定ファイルをコピーします。※1
-
Webサービス実装クラスを作成します。
-
Webサービス実装クラスをコンパイルします。※1
-
ポリシー記述に対応するWebサービスセキュリティ機能定義ファイルおよびWebサービスセキュリティ方針定義ファイルを作成します(詳細は「3.11.3 定義ファイルの編集」を参照)。
-
web.xmlおよびapplication.xmlを作成します。※1
-
EARファイルを作成します。※2
- 注※1
-
ポリシーを使用しない場合と共通の手順です。
- 注※2
-
ポリシーを使用する場合,EARファイルを作成するときには次のことに注意してください。
-
Webサービスセキュリティ機能定義ファイル,Webサービスセキュリティ方針定義ファイル,およびハンドラチェイン設定ファイルをEARファイルに配置する必要があります。詳細は,「3.10.1 Webサービスの実装手順(WSDL起点)」を参照してください。
-
ポリシー記述を含むメタデータを発行するには,WSDLおよびポリシー記述をWARファイルのWEB-INF/wsdlディレクトリに含める必要があります。詳細はマニュアル「アプリケーションサーバ Webサービス開発ガイド」を参照してください。
-
- 〈この項の構成〉
(1) ポリシー記述をインポートする
Webサービスセキュリティ機能では,次のポリシー記述をサポートしています。
ポリシー記述 |
説明 |
格納先 |
---|---|---|
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サービスセキュリティ機能がサポートしているポリシー記述に含まれるアサーションを示します。
ポリシー記述 |
アサーション種別 |
アサーション名 (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の要素は次のとおりです。
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>