使用Active Directory身份验证(NTLM)的JAX-WS IBM客户端使用.Net WS

Jon*_*ero 5 .net websphere ntlm jax-ws active-directory

我想从IBM WebSphere使用.Net WS.

我使用JAX-WS IBM实现创建了一个WS-client,它在IIS上使用.Net WS.客户端在SUSE上,身份验证由NTLM和Windows Server 2003 Active Directory进行.

  • 如果客户端在命令行中执行,则实现调用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时,auth协议是NTLMv2(由于NTLM的安全问题,所有人都转移到NTLMv2)并且请求失败,因为HTTP客户端3不支持NTLMv2. X是Axis2的依赖关系.并且有一段时间他们不会迁移.

如果我使用JAX-WS的其他实现而不是IBM,那么我将失去控制台管理和自动注释读取,以及IBM的支持.

问题

我不明白为什么在RAD内部它不起作用,是从命令行工作的相同程序.

如何使用具有特定凭据的NTLMv2协议支持使JAX-WS IBM实现进行身份验证?(java.net.Authenticator为您提供了这个,它应该被调用...它没有)

是否有任何方法可以使IBM JAX-WS实现使用另一个HTTP客户端而不是标准客户端?

甚至IBM JVM实现也提供了NTLM auth(这就是命令行和直接HttpConnection执行工作的原因)所以我不明白为什么他们不将它用于IBM WS栈.

加分

有没有什么好方法可以通过ActiveDirectory身份验证提供使用WS的双向能力?

评论

Spring WS使用支持NTLMv2 auth的HttpClient 4.X,但我需要一个JAX-WS实现,它应该是IBM的实现.IBM JAX-WS似乎只支持Basic AUTH.我不明白Microsoft WS互操作对IBM来说并不重要.

参考

认证者conf:

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

/sf/answers/419629451/

提前致谢!

Jon*_*ero 2

最后,这就是我所做的。

我使用 RAD 插件创建 JAXB 对象来创建 JAX-WS 客户端。我使用生成的 DTO 作为传递给 Spring WS 库的消息。Spring WS 2.1 附带了 Http Client 4.2,它带来了 NTLMv2 支持。

我创建了一个小型库来使这个过程更容易,但程序的想法是:

  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 客户端的对象生成,将服务方法的参数包装到 Spring WS 进行调用所需的对象中。

对于设置NTCredentialsWebServiceTemplate发件人的 NTLM 身份验证。

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 身份验证运行良好。