我想使用 IBM WebSphere 的 .Net WS。
我使用 JAX-WS IBM 实现创建了一个 WS 客户端,它使用 IIS 上的 .Net WS。客户端位于 SUSE 上,并且通过 NTLM 使用 Windows Server 2003 Active Directory 进行身份验证。
如果客户端在命令行中执行,则实现调用 java.net.Authenticator 来获取凭据,并且请求成功。
如果客户端在 RAD 内执行,则不会调用身份验证器,并且会失败并返回 401。
如果客户端在 WebSphere 内部执行,则不会调用 Authenticator,并且会失败并返回 401。
如果我直接创建到 .Net WS URL 的 Http 连接,则会调用身份验证器并且请求成功。
如果我使用 Axis2(直接而不是 IBM Axis2 JAX-WS 实现)而不是 JAX-WS IBM 实现,我可以将 Authenticator 对象传递给 Axis2 客户端,并且请求会成功。这仅适用于 Windows Server 2003 的 NTLM 协议。当我们迁移到 Windows Server 2008 时,身份验证协议是 NTLMv2(由于 NTLM 存在安全问题,每个人都在迁移到 NTLMv2),并且请求失败,因为 HTTP Client 3 不支持 NTLMv2。 X 是 Axis2 的依赖项。在一段时间内他们不会迁移。
如果我使用 IBM 以外的其他 JAX-WS 实现,我就会失去控制台管理和自动注释读取功能,并且失去 IBM 的支持。
问题
我不明白为什么在 RAD 内部它不起作用,它与从命令行运行的程序相同。
如何使用特定凭证通过 NTLMv2 协议支持使 JAX-WS IBM 实现进行身份验证? (java.net.Authenticator 为您提供了这个,并且应该调用它......但它没有)
有没有办法让 IBM JAXWS 实现使用标准客户端之外的另一种 HTTP 客户端?
甚至 IBM JVM 实现也提供 NTLM 身份验证(这就是命令行和直接 HttpConnection 执行有效的原因),所以我不明白为什么他们不将它用于 IBM WS 堆栈。
加分
有没有什么好的方法可以通过 ActiveDirectory 身份验证提供使用 WS 的双向能力?
Comment
Spring WS 使用支持 NTLMv2 身份验证的 HttpClient 4.X,但我需要一个 JAX-WS 实现,它should成为 IBM 的一员。 IBM JAX-WS 似乎仅支持基本身份验证。我不明白为什么 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
提前致谢!