首页 文章

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

提问于
浏览
6

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

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

以下是测试环境的说明:

Target Server:

  • Windows 2008 R2独立服务器(不属于AD域)

  • 使用WCF实现的Microsoft SOAP服务

  • WCF配置为SPNEGO身份验证(kerberos和NTLM)

  • 无法重新配置WCF服务器以支持其他身份验证模式:(

Client Machine:

  • 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 回答

  • 2

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

相关问题