【发布时间】:2011-05-09 16:22:48
【问题描述】:
有谁知道在 Windows 上运行的 Java 6 客户端在访问实现 SPNEGO 身份验证协议的 Microsoft 服务器时是否能够通过 NTLM 进行身份验证?
我的理解是,在 Windows 上运行的 Java 6 已经内置了对 SPNEGO 的支持,但是在无法进行 kerberos 身份验证的情况下,Java 实现似乎不会尝试 NTLM 身份验证。 Sun 文档中提供的 Authenticator 示例在响应服务器发送 WWW-Authenticate: Negotiate 时失败并出现 401 Unauthorized 错误。
这里是测试环境的描述:
目标服务器:
- Windows 2008 R2 独立服务器(不属于 AD 域)
- 使用 WCF 实现的 Microsoft SOAP 服务
- 为 SPNEGO 身份验证配置 WCF(kerberos 和 NTLM)
- 无法重新配置 WCF 服务器以支持其他身份验证模式 :(
客户端机器:
- Windows 7 64 位独立工作站(不属于域)
- 运行 Sun SPNEGO 示例的 Java SE6 客户端
最终目标是使用 Apache CXF 2.4.0 在 WCF 服务器上调用 SOAP 服务。在添加 CXF 和 SOAP 的复杂性之前,我一直在尝试使用简单的 Java 测试应用程序从服务器检索 WSDL 以解决身份验证问题。
FWIW - 我可以使用 Windows 服务器的本地管理员登录从 IE 访问 WCF 服务器。我还能够在没有任何特殊授权配置的情况下创建 Delphi XE SOAP 客户端。 Delphi SOAP 客户端在后台使用 WinInet。
【问题讨论】:
-
您的问题解决了吗?
-
@David Brossard - 是的,我们确实让事情正常了。我们的解决方案需要注意的是,原生 Java 身份验证功能在作为 Windows 服务运行时会出现问题,除非使用服务帐户。最近,我们开始使用支持 NTLMv2 身份验证的 Apache HTTP 客户端。它需要一些技巧才能使其工作,但事实证明它在大量生产使用中是可靠的。
-
谢谢!然后,我将研究 Apache 客户端。我的 tomcat 作为 Windows 服务运行,这很好