确定浏览器是否支持Windows集成身份验证。

6

有没有一种方法可以确定浏览器是否支持NTLM,而不需要在IIS中为特定站点或目录启用NTLM,也不需要显示登录对话框/弹出窗口?最好使用ColdFusion或可能是JS和CF的组合来确定。我希望不仅限于IE,因为其他浏览器(如FF)也支持NTLM身份验证。

3个回答

4
如果您请求一个页面,返回401并表示只接受NTLM,然后浏览器发送另一个HTTP数据包尝试响应它,那么它支持NTLM。 您不必让IIS这样做--您可以在任何可以设置响应代码和标头以请求NTLM的页面。 如果您没有收到另一个请求,则意味着客户端无法通过此方式进行身份验证。
您可以通过将此请求放入IFrame中来检测客户端,然后在外部页面中检查IFrame中发生了什么。

我尝试过这个,但不幸的是,浏览器仍然要求凭据。这在整个过程的透明性方面有点破坏。基本上,除了透明的NTLM身份验证之外,我不想有任何登录。有没有办法抑制这种默认行为?我也尝试了Steve的建议,但似乎使用该技术会导致CF服务器发送数据,而不再从客户端传入数据。这将导致一个持续的401响应。 - illvm
你看到过尝试进行XMLHTTPRequest会发生什么吗? - Lou Franco
我也会尝试使用其他方式来强制进行HTTP请求(如img、script、link等标签),看看会发生什么。也许有一种方法是浏览器会默默地失败(而不弹出窗口)。 - Lou Franco
XMLHTTPRequest可以在Firefox中使用,但在IE中无法使用。在Firefox中,您可以使XHTTPRs在后台运行并抑制弹出窗口,但据我所知,在IE或任何其他浏览器中都无法这样做。我尝试过使用img、script和link标签,包括在运行时动态构建它们。到目前为止还没有成功。 - illvm
可能需要结合浏览器检测和这些技术 -- 祝你好运。 - Lou Franco
我不明白上述技巧如何帮助检测浏览器是否支持NTLM,请再详细解释一下?如果我有误请指出。当浏览器收到带有NTLM头的401响应后,它将会提示登录对话框/发送另一个HTTP数据包。如果我使用JavaScript/XMLHTTPRequest或其他方式发出请求并收到带有NTML头的401响应,由于请求是由我的客户端代码发出的,处理响应的也将是我的客户端代码,因此浏览器不会再次发送HTTP数据包并尝试响应它。 - King Chan

2

在Lou的回答基础上,您可以在try/catch块中进行cfhttp请求。然后检查响应头以确定接下来的步骤。


0

不幸的是,您可能被迫使用浏览器嗅探和白名单。


很遗憾,这不起作用,因为无法确定浏览器是否配置为将特定页面用作 NTLM 认证的可信来源。 - illvm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接