6

有谁知道在 Windows 上运行的 Java 6 客户端在访问实现 SPNEGO 身份验证协议的 Microsoft 服务器时是否能够通过 NTLM 进行身份验证?

我的理解是,在 Windows 上运行的 Java 6 内置了对 SPNEGO 的支持,但在无法进行 kerberos 身份验证的情况下,Java 实现似乎不会尝试 NTLM 身份验证。Sun 文档中提供的Authenticator示例失败并出现401 Unauthorized错误,以响应服务器发送WWW-Authenticate: Negotiate

下面是测试环境的说明:

目标服务器:

  • Windows 2008 R2 独立服务器(不属于 AD 域)
  • 使用 WCF 实现的 Microsoft SOAP 服务
  • WCF 配置为 SPNEGO 身份验证(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。

4

1 回答 1

2

Java 的 SPNEGO 能够支持 Kerberos 只是因为 NTLM 是一种专有的遗留 MS 技术。如果您的目标机器不是域的一部分,就像您的情况一样,那么您就不走运了。如果可以,您应该切换到 DIGEST-MD5 身份验证。

于 2011-07-24T13:20:05.317 回答