我最近在 ASP.NET 中为我的公司创建的 Intranet 网站/应用程序启用了摘要式身份验证。
我这样做的原因是因为 Windows 身份验证似乎只适用于某些用户,而不适用于其他用户。我不知道为什么,我对 IIS 的了解也不够,无法尝试跟踪问题。经过一些试验和错误,我发现摘要式身份验证似乎给了我想要的行为。即:仅允许在域上拥有有效帐户的用户使用其凭据登录网站。
现在的问题是 Firefox (3+) 似乎要求用户对发送到服务器的每个 HTTP 请求进行身份验证。这在 Internet Explorer (6+) 或 Chrome 中似乎不会发生。
我试过寻找解决方案,但我总是走到死胡同。我会找到关于这个问题的讨论,每个发布的解决方案都会导致一个死链接……或者它在 Experts Exchange 上,我无权查看解决方案。
这个问题似乎与(从我读到的)不同的浏览器发送它们的身份验证 header 的方式与 IIS 解释它们的方式有关。我不确定我能做些什么来改变这一点?我发现的解决方案之一提到编写一个 ISAPI 过滤器来解决这个问题,但当然,到最终过滤器的链接已损坏,我不知道如何自己制作一个。
我尝试在 about:config 中处理 NTLM 和其他与身份验证相关的字符串,以尝试强制 Firefox 信任我的服务器,但这似乎也不起作用。
从我读过的其他一些来源来看,如果我切换回 Windows 身份验证,一切似乎都应该可以工作,但是我又回到了原点,其中身份验证仅适用于某些用户而不适用于其他用户。
任何一个问题的解决方案都适用于我,但我对 Windows 身份验证问题的信息很少。如果有人可以指导我跟踪问题,我也很乐意为此发布更多信息。
以下是我发现的讨论看似相同问题的网址。 (对不起,我不能把它们全部链接起来,否则我不会发帖)
最佳答案
这是 FF 中的一个已知错误。 See Advanced digest authentication works from Internet Explorer however we receive multiple authentication prompts on each GET request from fire fox
IE 6 有同样的错误。一个潜在的解决方法是在 IIS6 中重新启用“旧”摘要:
http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/1d6e22ac-0215-4d12-81e9-c9262c91b797.mspx?mfr=true
当前,如果服务器发送不透明指令,IE 客户端将返回该指令值,如 RFC 中指定的那样。不幸的是,对于来自客户端的后续请求,其中 nonce 计数增加(计数 2 及以上),不发送 opaque 指令值。这将导致服务器上的身份验证失败,并返回 401 Unauthorized。 IE 客户端现在请求新挑战的用户名和密码,并检索文件。
这需要额外的往返行程,并且每次都会提示用户输入凭据。
RFC 声明 opaque 必须始终根据来自客户端的请求发送。
IE6 使用的 Digest 实现不符合 RFC ( http://www.ietf.org/rfc/rfc2617.txt )。
3.2.2 授权请求头
opaque 和 algorithm 字段的值必须是提供的值
在实体的 WWW-Authenticate 响应头中
要求。
3.3 摘要操作
客户端应该记住用户名、密码、nonce、nonce 计数和
与身份验证 session 关联的不透明值用于
在 future 的请求中构造 Authorization header
保护空间。
因为客户端需要返回 opaque 的值
服务器在 session 期间给予它的指令,
不透明数据可用于传输身份验证 session 状态
信息。
-------- 编辑添加 -----
Windows Authentication seemed to only work for some users, and not for others. How did it fail? Did you enable impersonation?
关于asp.net - Firefox 在 IIS6 上启用摘要式身份验证的每个 HTTP 请求上都要求输入用户名/密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4167271/