5

IBM WebSphere から .Net WS を使用したいと考えています。

IIS で .Net WS を使用する JAX-WS IBM 実装で WS クライアントを作成しました。クライアントは SUSE 上にあり、認証は Windows Server 2003 Active Directory を使用した NTLM によって行われます。

  • クライアントがコマンド ラインで実行される場合、実装は java.net.Authenticator を呼び出して資格情報を取得し、要求は成功します。

  • クライアントが RAD 内で実行される場合、Authenticator は呼び出されず、401 で失敗します。

  • クライアントが WebSphere 内で実行される場合、Authenticator は呼び出されず、401 で失敗します。

  • .Net WS URL への HttpConnection を直接作成すると、Authenticator が呼び出され、リクエストが成功します。

  • JAX-WS IBM 実装の代わりに Axis2 (IBM Axis2 JAX-WS 実装ではなく直接) を使用すると、Authenticator オブジェクトを Axis2 クライアントに渡すことができ、要求は成功します。これは、Windows Server 2003 の NTLM プロトコルでのみ機能します。Windows Server 2008 に移行すると、認証プロトコルは NTLMv2 になり (NTLM のセキュリティ上の問題により、誰もが NTLMv2 に移行します)、NTLMv2 は HTTP クライアント 3 でサポートされていないため、要求は失敗します。 Axis2 の依存関係である X。そしてしばらくの間、彼らは移住するつもりはありません。

IBM 以外の JAX-WS 実装を使用すると、コンソール管理と自動注釈読み取りが失われ、さらに IBM からのサポートが失われます。

質問

なぜ RAD の内部で動作しなかったのかわかりません。コマンド ラインから動作するのと同じプログラムです。

JAX-WS IBM 実装を、特定の資格情報を使用した NTLMv2 プロトコル サポートで認証するにはどうすればよいですか? (java.net.Authenticator はこれを提供します。これを呼び出す必要があります ... 呼び出しません)

IBM JAX-WS 実装で標準以外の HTTP クライアントを使用する方法はありますか?

IBM JVM 実装でさえ NTLM 認証を提供します (これが、コマンド ラインと HttpConnection の直接実行が機能する理由です)。そのため、IBM WS スタックに NTLM 認証を使用しない理由がわかりません。

プラスポイント

ActiveDirectory 認証で WS を使用する双方向機能を提供する良い方法はありますか?

コメント

Spring WS は、NTLMv2 認証をサポートする HttpClient 4.X を使用しますが、JAX-WS 実装が必要であり、それはIBM のものである必要がありますIBM JAX-WS は Basic AUTH のみをサポートしているようです。Microsoft WS 相互運用性が IBM にとって重要ではない理由がわかりません。

参考文献

オーセンティケータ設定:

http://docs.oracle.com/javase/6/docs/api/java/net/Authenticator.html#setDefault%28java.net.Authenticator%29

https://stackoverflow.com/a/5994706/14811

前もって感謝します!

4

2 に答える 2

2

NTLMv2の方が安全であるため、Kerberosベースのテクノロジ(Windows 2000で導入)ではなく、NTLM(1994?)からNTLMv2(1999)に移行していますか?

Microsoftとの相互運用に関しては、最近のシステムでは、JAX-WSクライアントと.NETサービスの間でWS-SecurityKerberosを使用します。これはテスト済みです。

実行しようとしていること(プロセスで使用されるAuthenticatorを置き換える)はスタンドアロンのJavaアプリケーションに適用できますが、Javaプロセスがそれぞれ独自の「認証」要件を持つ複数の「アプリケーション」をホストするJavaEnterpriseモデルには適合しません。 WebSphereServerプロセスが相互に通信することによって課せられる内部要件(AppServerからAppServer、NodeAgentからAppServer、App ServerからLDAPなど)を気にしないでください。

于 2012-09-11T16:01:38.733 に答える
2

最後に、これは私がしたことです。

RADプラグインを使用してJAXBオブジェクトを作成し、JAX-WSクライアントを作成します。生成されたDTOを、SpringWSライブラリに渡すメッセージとして使用します。Spring WS 2.1には、NTLMv2をサポートするHttpClient4.2が付属しています。

このプロセスを簡単にするために小さなライブラリを作成しましたが、手順のアイデアは次のとおりです。

  1. RADを使用してJAX-WSクライアントを生成します
  2. RADによって生成されたサービスインターフェイスを実装するクラスを作成します
  3. インターフェイスメソッドごとに:
  4. 3.1インターフェイスメソッドのパラメータをJAXBオブジェクトに挿入します
  5. 3.2このオブジェクトをWebServiceTemplate(Springオブジェクト)Webサービス呼び出しに渡します。
  6. 3.3呼び出し応答をJAXBメソッド応答オブジェクトにキャストします
  7. 3.4応答オブジェクトの内部値を返す

したがって、最終的に行うことは、JAX-WSクライアントのオブジェクト生成を再利用して、サービスメソッドのパラメーターをSpringWSが呼び出す必要のあるオブジェクトにラップすることです。

送信者に設定さNTCredentialsれたNTLM認証の場合。WebServiceTemplate

Axis2 1.7は、更新されたバージョンのHttpClient 4.2.XでNTLMv2をサポートしますが、リリース日はまだありません。

見る:

  • WebServiceTemplateWSコール

http://static.springsource.org/spring-ws/sites/2.0/apidocs/org/springframework/ws/client/core/WebServiceTemplate.html#marshalSendAndReceive%28java.lang.Object%29

  • WebServiceTemplate送信者

http://static.springsource.org/spring-ws/sites/2.0/apidocs/org/springframework/ws/client/support/WebServiceAccessor.html#getMessageSenders%28%29

  • NTCredentials

http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/auth/NTCredentials.html


更新:Axis 1.7をテストしましたが、NTLM認証は正常に機能します。

于 2012-10-11T15:02:01.217 に答える