我想使用 IBM WebSphere 的 .Net WS。
我使用 JAX-WS IBM 实现创建了一个 WS 客户端,它在 IIS 上使用 .Net WS。客户端在 SUSE 上,并且通过 NTLM 和 Windows Server 2003 Active Directory 进行身份验证。
如果客户端在命令行中执行,则实现调用 java.net.Authenticator 以获取凭据并且请求成功。
如果客户端在 RAD 中执行,则不会调用 Authenticator 并且它会失败并返回 401。
如果客户端在 WebSphere 中执行,则不会调用 Authenticator,并且会失败并返回 401。
如果我直接创建一个指向 .Net WS URL 的 HttpConnection,则会调用 Authenticator 并且请求成功。
如果我使用 Axis2(直接,而不是 IBM Axis2 JAX-WS 实现)而不是 JAX-WS IBM 实现,我可以将 Authenticator 对象传递给 Axis2 客户端,并且请求成功。这仅适用于 Windows Server 2003 的 NTLM 协议。当我们迁移到 Windows Server 2008 时,身份验证协议是 NTLMv2(由于 NTLM 的安全问题,每个人都在迁移到 NTLMv2)并且请求失败,因为 HTTP 客户端 3 不支持 NTLMv2。 X 是 Axis2 的依赖项。在一段时间内,他们不会迁移。
如果我使用除 IBM 之外的其他 JAX-WS 实现,我会失去控制台管理和自动注释读取,以及失去来自 IBM 的支持。
问题
我不明白为什么在 RAD 内部它不起作用,是从命令行运行的同一个程序。
您如何使用特定凭据通过 NTLMv2 协议支持使 JAX-WS IBM 实现进行身份验证?(java.net.Authenticator 为您提供了这个,它应该被称为......它没有)
有什么方法可以让 IBM JAX-WS 实现使用另一个 HTTP 客户端而不是标准客户端?
甚至 IBM JVM 实现也提供 NTLM 身份验证(这就是命令行和直接 HttpConnection 执行工作的原因),所以我不明白他们为什么不将它用于 IBM WS 堆栈。
加分
有没有什么好的方法可以提供双向能力来使用 ActiveDirectory 身份验证来消费 WS?
评论
Spring WS 使用支持 NTLMv2 身份验证的 HttpClient 4.X,但我需要一个 JAX-WS 实现,它应该是 IBM 的。IBM JAX-WS 似乎只支持 Basic AUTH。我不明白 Microsoft WS 互操作对 IBM 来说是多么不重要。
参考
身份验证器配置:
https://stackoverflow.com/a/5994706/14811
提前致谢!