我最近在我为ASP.NET公司创建的Intranet网站/应用程序中启用了摘要式身份验证。
我这样做的原因是因为Windows身份验证似乎只适用于某些用户,而不适用于其他用户。我无法弄清楚为什么我也不了解IIS以试图追踪问题。经过一些反复试验,我发现摘要式身份验证似乎给了我想要的行为。即:仅允许域中具有有效帐户的用户使用其凭据登录网站。
现在的问题是,Firefox(3+)似乎要求用户对发送到服务器的每个HTTP请求进行身份验证。这似乎不会出现在Internet Explorer(6+)或Chrome中。
我试过寻找解决方案,但我总是到达死胡同。我会找到关于这个问题的讨论,每个发布的解决方案都会导致死链接......或者它在Expert Exchange上,我无权查看解决方案。
问题似乎与我所阅读的内容有关(不同之处)是不同浏览器发送其身份验证标头的方式与IIS解释它们的方式。我不知道我能做些什么来改变这个呢?我发现的其中一个解决方案提到编写一个ISAPI过滤器来解决这个问题,但当然完成过滤器的链接已被破坏,我不知道如何自己制作一个过滤器。
我已经尝试在about:config中弄乱NTLM和其他与auth相关的字符串,试图强制Firefox信任我的服务器,但这似乎也不起作用。
从我读过的其他几个来源看,如果我切换回Windows身份验证,似乎应该的所有内容都可以工作,但是我回到了第一个认证仅适用于一些用户而不是其他用户。
任何一个问题的解决方案对我都有用,但我对Windows身份验证问题的信息很少。如果有人可以指导我追踪问题,我也很乐意为此发布更多信息。
以下是我发现的讨论同样问题的网址。 (对不起,我无法将它们全部链接起来,否则我不会发布其他内容)
答案 0 :(得分:9)
IE 6有同样的bug。一个潜在的解决方法是在IIS6中重新启用“旧”摘要:
目前,如果服务器发送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身份验证似乎只适用于某些用户,而不适用于其他用户。 怎么会失败?你启用了模仿吗?