2

我有一个在 UI 实现中大量使用 javascript 的 Web 部件。它还利用对某些 SharePoint Web 服务的异步 XmlHttpRequest 请求(我正在使用 SPServices,顺便说一句)。

对于某些请求,用户面临 NTLM 身份验证挑战,输入凭据后,请求完成。尽管有超过 3 个请求,但在一页加载时会发生 3 次。有几件事情让我感到困惑:

  • 正如我所说,并非所有请求都有这个问题
  • 用户已经通过 NTLM 身份验证访问了该站点,那么为什么 ajax 请求会受到挑战?
  • 这是在 Windows 域环境中。在非域环境中,不存在此问题(尽管两者都使用了 Windows 身份验证)。

当然,这一切都在 IE 中。我尝试的一件事是将 NTLM 身份验证标头插入到 ajax 请求中,但这并没有改变任何东西(我真的不认为它会,但值得一试)。

有什么建议么?

4

4 回答 4

1

使用:传输clientCredentialType="Windows"

检查http://msdn.microsoft.com/en-us/library/bb226411(BTS.20).aspx了解更多信息

于 2010-03-02T11:43:05.347 回答
1

不应该这样。Windows 身份验证是按进程进行的,如果您已经通过身份验证,那么当您再次加载某些内容时,您仍然保持身份验证,无论它是浏览器的主连接还是 XHR 请求。

我在我们的一个测试服务器中看到了这种奇怪的行为。在这种情况下,对 SharePoint 的 WebDAV 访问也被破坏,有时您无法访问\\sharepointserver\sites\somesite路径(但几分钟后您可以再次访问)。在这种情况下,Kerberos 身份验证似乎有问题,有时会发出错误的令牌。然而,我们并没有解决这个问题,只是安装了一个新的服务器并将内容数据库附加到它上面。那行得通:-)

于 2010-01-28T08:25:10.130 回答
1

Internet Explorer 会记住它是否对给定站点进行了 NTLM 身份验证。如果它曾经被要求 POST 到该站点,它将期望该站点重新对其进行身份验证。如果网站没有,浏览器将不会在帖子正文中发送任何详细信息。

于 2010-07-08T09:44:25.527 回答
0

此问题是由于 HTTP1.1 会话超时造成的。当您首次登录 NTLM 身份验证站点时,会打开一个 HTTP 会话。此会话已通过身份验证,并且您在此会话打开时发出的每个请求都将使用会话的 NTLM 令牌自动进行身份验证。现在,当您发出 XmlHttpRequest 时,如果 HTTP 会话仍然打开,那么您的请求不会要求任何身份验证,因为它已经就绪。但是,如果会话以一种或另一种方式到期或关闭。然后将提示您登录。为了更好地理解,只需快速搜索 HTTP1.1 协议,您就会更好地了解我在说什么。

于 2010-02-17T13:27:27.843 回答