特集
|
■JavaのWebサービスをWS-Securityで呼び出す
今度はWSTKで開発したセキュアなXML Webサービスに、WSEベースのクライアントからアクセスしてみよう。
まずはサービスの実体を作成する
Apache AxisとWSTKのXML Webサービスは、単なるJavaのクラスだ。ここではズルをして次のようなソースにした。もちろんJavaのコードからSQL Serverにアクセスすることも可能である。
|
|
XML WebサービスとなるJavaのクラス |
Apache Axisにクラスを配置する
Axisはサーブレットなので、実行時にロードするクラスはWEB-INF/classesフォルダにコピーしておけばよい。ここでは上記のソース・コードをコンパイルしてできたDataProvider.classをコピーした。
Apache Axisでサービスを公開する
下記のようなXMLファイルを作成し、deploy.wsddという名前で保存する。
|
|
Apache AxisでWS-Securityを利用してWebサービスを公開するための設定ファイル(ファイル名はdeploy.wsdd) |
上記のファイルを使って次のコマンドで設定する。
% java org.apache.axis.client.AdminClient deploy.wsdd
SecurityReceiver.xmlファイルの中身は次のとおりだ。何を書けばいいのか分からないので、fooやbarになっているところもある。これでも動くので取りあえずそのまま掲載してみる。何せトライ&エラーなのでご了承願いたい。
|
|
deploy.wsddで参照しているSecuritySender.xmlファイルの内容 | |
トライ&エラーで設定したため一部未設定個所があるが、いちおう動作は可能。 |
これらの設定によって、このサービスに渡されたWS-Securityのヘッダに設定されたユーザー名とパスワードは、
- com.ibm.wstk.axis.handlers.token.username
- com.ibm.wstk.axis.handlers.token.password
という名前のプロパティに取り込まれる。deploy.wsddファイル内にあるAuthBridgeHandlerというクラスは、筆者が仕方なく開発したAxisのハンドラ・クラスで、上記2つのプロパティの値をorg.apache.axis.MessageContextクラスにユーザー名とパスワードとして設定し直すものだ。これによって、Axisに標準で付属する、
- org.apache.axis.handlers.SimpleAuthenticationHandler
- org.apache.axis.handlers.SimpleAuthorizationHandler
が利用できるようになる。認証と承認の機能はこれらのハンドラに任せている。このあたりはApache Axisの解説になってしまうので省略する。
これでサービス側は完成だ。
次に、WSEベースのクライアントを開発する。とはいっても、先に利用したクライアントに少し手を加えるだけだ。
先ほど開発したクライアント・アプリケーションのプロジェクトにWeb参照を追加する
今回は2つのWebサービスでWSDLを共有していないので、先ほどAxisに配置したDataProviderサービスのWSDLを次のURLから取得して、Web参照を作り直す。
http://localhost:8080/axis/services/DataProvider?wsdl
Mainメソッドを少し修正する
いま作成したWeb参照を利用するように、クライアント・コードを次のように変更する(太字が修正部分)。
|
|
修正したコンソール・アプリケーションのコード | |
新たに作成されたプロキシ・クラスを利用するように、コードの一部を修正する。WS-Routingのヘッダを付加しないように、MustUnderstandプロパティはfalseに設定する。 |
MustUnderstandプロパティをfalseに設定しているのは、WSTKにはWS-Routingの実装が含まれていないからだ。WSEの実装はデフォルトでSOAPメッセージにWS-Routingのヘッダを付加してしまう。削除の方法が分からなかったため、取りあえずオプションのヘッダに変更して回避した。
これで実行すると次のようなメッセージが送受信される。
.NETクライアントから、WSTKを使用したJavaサーバへ送信されるSOAPメッセージ例(IEで表示) |
Javaサーバから、.NETクライアントへ送信されるSOAPメッセージ例(IEで表示) |
このとおり、WSEのクライアントからWSTKのサービスへのアクセスも大した手間もなく行うことができた。
今回のまとめ
XML Webサービスのセキュリティはまだまだ奥が深い。今回はまずは動かしてみようというのが趣旨だったが、予想外に簡単にクライアントとサービスの実装ができてしまった。さらには、JavaベースのWSTKとの相互運用もかなり高いレベルで行うことができている。これも仕様がガッチリ決められ、ベンダが実装で競争するようになってきたあかしの1つなのだろう。
次回からは、WSEの仕組みなどを取り上げて、WS-Securityの実装をさらに深く使い込んでみる。
INDEX | ||
[特集]次世代XML Webサービスを試す Part 1 | ||
1.WSEのインストール | ||
2.WSEを使ったセキュア XML Webサービスの実装 | ||
3.セキュアXML Webサービスのクライアントの実装 | ||
4.ほかのWS-Security実装との相互運用(1) | ||
5.ほかのWS-Security実装との相互運用(2) | ||
「特集:次世代XML Webサービスを試す」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|