Firefox在IIS6上启用了摘要式身份验证的每个HTTP请求上都要求输入用户名/密码

时间:2010-11-12 17:15:57

标签: asp.net iis firefox iis-6 digest-authentication

我最近在我为ASP.NET公司创建的Intranet网站/应用程序中启用了摘要式身份验证。

我这样做的原因是因为Windows身份验证似乎只适用于某些用户,而不适用于其他用户。我无法弄清楚为什么我也不了解IIS以试图追踪问题。经过一些反复试验,我发现摘要式身份验证似乎给了我想要的行为。即:仅允许域中具有有效帐户的用户使用其凭据登录网站。

现在的问题是,Firefox(3+)似乎要求用户对发送到服务器的每个HTTP请求进行身份验证。这似乎不会出现在Internet Explorer(6+)或Chrome中。

我试过寻找解决方案,但我总是到达死胡同。我会找到关于这个问题的讨论,每个发布的解决方案都会导致死链接......或者它在Expert Exchange上,我无权查看解决方案。

问题似乎与我所阅读的内容有关(不同之处)是不同浏览器发送其身份验证标头的方式与IIS解释它们的方式。我不知道我能做些什么来改变这个呢?我发现的其中一个解决方案提到编写一个ISAPI过滤器来解决这个问题,但当然完成过滤器的链接已被破坏,我不知道如何自己制作一个过滤器。

我已经尝试在about:config中弄乱NTLM和其他与auth相关的字符串,试图强制Firefox信任我的服务器,但这似乎也不起作用。

从我读过的其他几个来源看,如果我切换回Windows身份验证,似乎应该的所有内容都可以工作,但是我回到了第一个认证仅适用于一些用户而不是其他用户。

任何一个问题的解决方案对我都有用,但我对Windows身份验证问题的信息很少。如果有人可以指导我追踪问题,我也很乐意为此发布更多信息。


以下是我发现的讨论同样问题的网址。 (对不起,我无法将它们全部链接起来,否则我不会发布其他内容)

  • support.mozilla.com/tiki-view_forum_thread.php?locale=pt-BR&forumId=1&comments_parentId=346851
  • www.experts-exchange.com/Software/Internet_Email/Web_Browsers/Mozilla/Q_24427378.html
  • channel9.msdn.com/forums/TechOff/168006-Twin-bugs-in-IIS-IE-unfair-competitive-advantage-EDIT-SOLVED /
  • www.derkeiler.com/Newsgroups/microsoft.public.inetserver.iis.security/2006-03/msg00141.html

1 个答案:

答案 0 :(得分:9)

这是FF中的一个已知错误。 See Advanced digest authentication works from Internet Explorer however we receive multiple authentication prompts on each GET request from fire fox

IE 6有同样的bug。一个潜在的解决方法是在IIS6中重新启用“旧”摘要:

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/1d6e22ac-0215-4d12-81e9-c9262c91b797.mspx?mfr=true

目前,如果服务器发送opaque指令,则IE客户端将返回RFC中指定的该指令值。不幸的是,对于来自客户端的后续请求,其中随机数增加(计数2和更高),不发送opaque指令值。然后,服务器上的身份验证失败,并返回401 Unauthorized。 IE客户端现在请求新挑战的用户名和密码,并检索文件。

这需要额外的往返,每次都会提示用户输入凭据。

RFC声明必须始终根据客户端的请求发送opaque。 IE6使用的摘要实现不符合RFC(http://www.ietf.org/rfc/rfc2617.txt) 3.2.2授权请求标头    opaque和algorithm字段的值必须是提供的值    在实体的WWW-Authenticate响应头中    请求。

3.3摘要操作    客户端应该记住用户名,密码,nonce,nonce计数和    与要使用的身份验证会话关联的不透明值    在其中的未来请求中构造Authorization标头    保护空间。

因为客户端需要返回opaque的值    服务器在会话期间给出的指令,    不透明数据可用于传输认证会话状态    信息。 --------编辑添加-----

  
    

Windows身份验证似乎只适用于某些用户,而不适用于其他用户。     怎么会失败?你启用了模仿吗?