我有一个来自 Web 应用程序的 Java EE Web 应用程序,我必须使用需要 Kerberos/NTLM 身份验证的 SharePoint Web 服务,我该如何实现。我使用 CXF 来使用 Web 服务,并且它本身的 Web 应用程序使用 Windows 集成身份验证进行身份验证。
最佳答案
看一下 SPNEGO 协议(protocol),这是 Sharepoint(技术上是 IIS)用于单点登录身份验证的协议(protocol)。我不熟悉 CXF,但通常大多数 Web 服务平台都允许您根据请求提供附加 header 。基本上你需要的是:
1. Get authentication token for the sharepoint from user session
2. Use JAAS to generate tokens.
看这里http://appliedcrypto.com/spnego/spnego_jaasclient.html在这里 http://docs.oracle.com/javase/6/docs/technotes/guides/security/jgss/lab/part6.html了解更多详情。
适用于您想要对共享点的浏览器用户进行身份验证的情况。您必须在您的网络应用程序中实现 SPNEGO 协议(protocol),例如您可以使用 this包你做吧。大多数现代应用程序服务器都支持 SPNEGO 协议(protocol) [JBoss、WebSphere]。实现 SPNEGO 协议(protocol)后,您可以从“Authorization” header 中获取 kerberos token 。
那么你有两个选择:
如果您使用与 SharePoint 前端相同的身份运行网络应用程序,您只需将相同的 token 重新发送到共享点即可。
如果您以不同的身份运行,则必须使用用户的 token 前往 Active Directory 并代表您的用户请求共享点服务的票证。您的网络应用程序所使用的帐户必须受到信任才能在 Active Directory 中进行委派
此外,我不确定 SharePoint 是否接受 SOAP header 中的 kerberos token ,我相信您必须使用 HTTP header 进行身份验证。
This这个问题可能对你有帮助
如果您想使用单点登录功能(即使用当前用户身份),请查看 here
关于java - 来自 Java Web 应用程序的 SharePoint Web 服务使用 CXF 和 Kerberos/NTLM 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9361840/