特集
次世代XML Webサービスを試す Part 1

4.ほかのWS-Security実装との相互運用(1)

インフォテリア株式会社
吉松 史彰
2002/10/11

Page1 Page2 Page3 Page4 Page5 Page6

ほかのWS-Security実装との相互運用

 IBMはalphaWorksという、やはりTechnology Preview的な位置付けのソフトウェアを配布するWebサイトで、Web Services Toolkit(以下WSTK)を提供している。2002年8月26日に配布が開始されたバージョン3.2.2では、WS-SecurityやDIMEなどをサポートしている。MicrosoftのWSDKの実装が、将来的には.NET FrameworkやEnterprise Servers製品へ反映されるのと同様に、WSTKの実装も多くはWebSphere製品に反映されていくだろう。

 本格的なテストは当然MicrosoftとIBMが協力して行っているが、ここでも簡単に相互運用性の検証をしてみよう。なお、WSTKの実装はJavaベースであり、XML WebサービスをホスティングするWebアプリケーションは、Apache Axisを想定している。Apache Axisのインストールなどはここでは省略するので、@ITのJava Solutionフォーラムなどを参考にしてほしい。

■JavaクライアントからWS-Securityで呼び出す

 まずはWSTK送信者→WSDK受信者という組み合わせを実施してみる。WSDK側は、先ほど開発したXML Webサービスをそのまま利用する。WSTKの送信側は次のように開発した。なお、CLASSPATH環境変数の値は、WSTKのインストール時のものに適切に設定されているものとする。

WSDL2Javaを使って、WSDLからJavaのソース・コードを作成する

 ASP.NETは自動的にWSDLを生成するので、ここでは素直にそれを利用する。次のコマンドでJavaのソース・コードが生成される。

% java org.apache.axis.wsdl.WSDL2Java http://localhost/WSDK1/Service1.asmx?wsdl

で作成されたクラスを参照して、次のコードを作成する

 これがクライアントの実体となる。

public class DataGetter {
  public static void main(String[] args) throws Exception {
    org.tempuri.Service1Locator loc =
      new org.tempuri.Service1Locator();
    org.tempuri.Service1Soap srv = loc.getService1Soap();
    System.out.println(srv.getData());
  }
}
WSDL2Javaツールを使用して作成されたクラスを参照するクライアント・コード(Java)

上記のソース・コードをコンパイルする

% javac DataGetter.java

 ここまでは通常のXML Webサービスのクライアントを作成する手順だ。これだけではWS-Securityで要求されるヘッダは作成されない。そこで、WSTKの出番となる。WSTKにはWS-Securityのヘッダを付ける機能がある。なお、WSTKのドキュメントにはあまりにも何も書いていないので、下記の説明は筆者がWSTKをトライ&エラーで解析した結果、うまく動作した手順を再現したものだ。WSTKの本来的な使い方ではないかもしれないことをお断りしておく。

Axisのクライアント配布機能を使ってクライアントのパイプラインを作成する

以下のファイルをclient_deploy.wsddという名前で保存する。

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  <handler name="wssecurity-sender"
    type="java:com.ibm.wstk.axis.handlers.SecuritySender">
    <parameter name="configPath"
      value="C:/WS-X/Security/WSTK/client2/SecuritySender.xml"/>
  </handler>
  <handler name="client_identity"
      type="java:com.ibm.wstk.axis.handlers.ClientIdentityHandler">
    <parameter name="identityFilename"
      value="C:/WS-X/Security/WSTK/client2/identity.xml" />
  </handler>
  <service name="http://tempuri.org/GetData">
    <requestFlow>
      <handler type="client_identity"/>
      <handler type="wssecurity-sender"/>
    </requestFlow>
  </service>
</deployment>
Axisのクライアント配布機能を使って、クライアントのパイプラインを作成するための設定ファイル(ファイル名はclient_deploy.wsdd)

 SecuritySender.xmlファイルの中身は次のとおりだ。

<?xml version="1.0"?>
<clientbinding>
  <service-ref>
    <port-qname-binding>
      <SenderServiceConfig>
        <LoginConfig>
          <AuthMethod>BasicAuth</AuthMethod>
        </LoginConfig>
        <IDAssertion>
          <IDType>Username</IDType>
          <TrustMode confidential="no">BasicAuth</TrustMode>
        </IDAssertion>
      </SenderServiceConfig>

      <SenderBindingConfig>
        <LoginBinding>
          <CallbackHandler>
            com.ibm.xml.soapsec.token.DebugSenderCallbackHandler
          </CallbackHandler>
        </LoginBinding>
      </SenderBindingConfig>
    </port-qname-binding>
  </service-ref>
</clientbinding>
client_deploy.wsddで参照しているSecuritySender.xmlファイルの内容

 identity.xmlファイルの中身は、ユーザー名とパスワードである。

<?xml version="1.0"?>
<identity:identity 
  xmlns:identity="http://tempuri.org/xsd/2001/12/Identity/"
  userid="user1"
  passwd="pass1"
/>
client_deploy.wsddで参照している、ユーザー名とパスワードを含んだidentity.xmlファイルの内容

 上記のファイルを使って次のコマンドで設定する。

% java org.apache.axis.utils.Admin client client_deploy.wsdd

 これらのファイルとコマンドが何をしているかの解説は、本稿の趣旨から大きく外れるので省略する。要するに、identity.xmlファイルに設定されているユーザー名とパスワードをそのままWS-Securityのヘッダに設定してくれる。

次のコマンドでプログラムを実行する

% java DataGetter

 うまくいけば次のようなSOAPメッセージが生成されて、ASP.NETに送信され、結果が送り返される。

WSTKを使用したJavaクライアントから、ASP.NETサーバへ送信されるSOAPメッセージ例(IEで表示)
 
ASP.NETサーバから、Javaクライアントへ送信されるSOAPメッセージ例(IEで表示)

 そういうわけで、WSTKを使えばJavaのクライアントからもWS-Securityを使ったセキュアなXML Webサービスへのアクセスが可能となる。


 INDEX
  [特集]次世代XML Webサービスを試す Part 1
    1.WSDKのインストール
    2.WSDKを使ったセキュア XML Webサービスの実装
    3.セキュアXML Webサービスのクライアントの実装
  4.ほかのWS-Security実装との相互運用(1)
    5.ほかのWS-Security実装との相互運用(2)
 
 「特集:次世代XML Webサービスを試す」



Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間