IIS Digest 反复要求身份验证

IIS Digest 反复要求身份验证

我有一个 ASP.NET 内部网站开发副本,已签出并运行在我的本地计算机上。我们使用摘要式身份验证来允许用户使用其 Active Directory 帐户登录。

仅在我的开发副本上,Digest 有时会反复提示登录信息,通常每个页面请求约 9 次。反复登录后(或者也可以取消 9 次提示中的 8 次),我可以正常使用该网站。

我无法确定是什么引发了这个问题。有时这个问题在下一个页面请求时触发,有时在我编辑/保存/刷新页面后触发,有时根本不发生。

每个提示都会在事件查看器中触发多个登录(事件 ID 4624 和 4672)安全事件。每次登录事件爆发后不久,我都会看到一连串注销事件(事件 ID 4634)

一位同事的设置几乎相同(Windows 7,IIS 7),但没有遇到此问题。我们的生产副本(在不同的服务器上运行)也没有遇到此问题。我们尝试比较 IIS 中的设置,但并没有发现任何差异。

我正在使用 Chrome,但在其他浏览器上也遇到了这个问题。

答案1

这个问题已经11年了,但仍然没有解决。

实际问题是MD5-sessChrome 和 Firefox 中的错误实现。唯一正确的实现可以在(已被废弃的)IE 中找到。

如果启用了摘要式身份验证,IIS 是唯一支持最新 IIS 版本的流行 Web 服务器MD5-sess并且MD5-sess始终与其一起使用。

根据 RFC 2617(和 RFC 7616),哈希码的第一部分(H(A1)MD5-sess必须由服务器nonce第一的客户端cnonce。在收到H(A1)新服务器之前,不应更改nonce,即使客户端使用另一个cnonce

根据 Chrome 和 Firefox 源代码,浏览器会忽略此要求,并始终H(A1)使用 new重新计算cnonce。结果,第一个请求的第一个cnonce是有效的,并被 IIS 接受,但第二个和后续请求具有相同nonce和不同的哈希值cnonce,具有无效response哈希值并被 IIS 拒绝。这迫使浏览器对具有摘要授权的 URL 上的每个元素再次请求用户名和密码。一旦页面上的所有元素都被缓存,浏览器就不会再要求重新输入密码。

更多信息这里

看起来带有摘要式身份验证的 IIS 很少使用,这就是为什么这个问题多年来没有被注意到(并且没有被修复)。

MS Edge 基于 Chromium 代码,存在同样的问题。

答案2

如果此应用仅供内部使用,我建议使用集成身份验证而不是摘要。对于像您这样的没有内置 Web 表单身份验证的应用,99% 都是集成的(AD 身份验证直通)或通过 SSL 进行基本身份验证。

此外,Digest 并不总是适用于 AD,它取决于 AD 和每个用户的设置。Google 搜索“digest auth active directory”或“digest reversible crypto”,看看人们遇到的问题。

其他要查看的内容是文件/文件夹的 NTFS 权限,以及是否启用了匿名(不应该启用)。

答案3

您的计算机和服务器之间是否有(缓存/非缓存)Web 代理?我发现 Sharepoint 身份验证存在同样的问题,我们采取的解决方案是通过允许客户端绕过 Sharepoint 站点的规则摆脱 ISA 防火墙/代理。这解决了问题,但我们没有调查根本原因。

相关内容