通过NTLM从Windows上的Java SE6客户端进行HTTP“协商”身份验证

时间:2011-05-09 16:22:48

标签: java soap cxf ntlm spnego

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

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

以下是测试环境的说明:

目标服务器:

  • 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。

1 个答案:

答案 0 :(得分:2)

Java的SPNEGO只能使用Kerberos,因为NTLM是专有的传统MS技术。如果您的目标计算机不属于域名,就像您的情况一样,那么您运气不好。如果可以,您应该切换到DIGEST-MD5身份验证。