Chrome 87 在 CORS 中针对 Windows IIS 10 的 Windows 身份验证失败
Posted
技术标签:
【中文标题】Chrome 87 在 CORS 中针对 Windows IIS 10 的 Windows 身份验证失败【英文标题】:Chrome 87 is failing Windows Authentication in CORS against Windows IIS 10 【发布时间】:2021-03-03 06:16:20 【问题描述】:Chrome 86(及更早版本)、Edge、Curl 和 IE 都能够在 Windows 2019 机器上针对我的 IIS 10 ASP.NET 服务进行跨域 Windows 身份验证,没有任何问题。
但是 Chrome 87 失败,“从源 'http://[DIFFERENT]' 访问 XMLHttpRequest 在 'https://[REDACTED]' 已被 CORS 策略阻止:没有 'Access-Control-Allow-Origin'请求的标头存在“
奇怪的是,Chrome 87 与在配置相同的 Windows 2008 机器(不要问)上运行在 IIS 7.5 中的相同 ASP.NET 服务配合使用。
更新:注意 - 我意识到 [2020-12-04] “工作”系统恰好位于已添加到我的“始终可以使用 cookie 的站点”列表中的不同域上。所以“修复”从一开始就盯着我的脸……;)
使用 curl - 我看不出 Windows 身份验证的 IIS 响应之间有任何区别。
如果我破解我的 ASP.NET 并让它在所有请求中包含一个回显的 Access-Control-Allow-Origin 'http://[DIFFERENT]' 而不是主要请求 - 那么 Chrome 87 会发出 401 - 未授权- 而不是继续来回进行 Windows 身份验证。 Curl 和其他浏览器使用额外的标题就可以了。
直接调用网站(没有跨域)就可以了。
有人知道 Chrome 87 有什么不同吗?开发工具仅显示链中的“最后一个”请求 - 所以我不知道失败之前发生了什么。
更新:[2020-12-02] 显然,Chromium 团队声称它正在以它需要的方式工作......但在我看来,这似乎很奇怪。
https://bugs.chromium.org/p/chromium/issues/detail?id=1154281
“这是现在的预期行为 - 阻止第三方 cookie 现在就像在第三方请求上设置 crendials:omit未经认证的请求和提供 HTTP 身份验证凭据但没有 cookie 的请求将共享套接字。”
【问题讨论】:
检查您是否遇到了预检问题blog.lextudio.com/… 在这种情况下必须使用 IIS CORS 模块。 刚刚发现谷歌修改了 Chrome 以隐藏此类。不好的举动。然后试试 Fiddler,telerik.com/fiddler 它看起来与 3-th 方 cookie 有关。如果您在 Chrome 87 中启用第 3 方 cookie,您的 web 应用程序是否工作(和 Windows 身份验证)? @RobinJohnson 我看到你已经添加了来自 Chrome 错误的更新。在没有任何警告的情况下引入这是一个相当大的变化,据我所知,甚至在发行说明中都没有提及。我已在该错误报告中添加了一条评论,以添加我的声音。 @RobinJohnson 是的,我看到了答案,我们已经在我的组织中这样做了,就像我建议你尝试一样。很遗憾失去了自我建议的 anwser 的声誉 :) 让我们等待您现在提出的 chrome 问题。 【参考方案1】:我们在我们的环境中看到了同样的情况,Chrome 87 现在将 cookie 规则应用于 Kerberos 和 NTLM 身份验证(显然是一个错误)。这不仅会影响 XHR,还会影响从其他站点加载的任何资源(图像、iframe 等)。
我们设置了“阻止第三方 cookie”,并发现将受影响的站点和域添加到 Chrome 中的“始终可以使用 cookie 的站点”列表已恢复身份验证;并且是我们可以接受的解决方法,因为我们通过组策略管理 Chrome,并且可以轻松推出更新的网站列表。
2020-12-02: 截至今天,MS Edge 87 表现出相同的行为。
【讨论】:
谢谢汤姆!那确实奏效了。我在看 IIS CORS 文档时睡眼惺忪,它一直在谈论 cookie(这是整个威胁空间),但我一直在想,但我没有使用任何 cookie……但是一个有问题的 Chrome 实现可以解释这一点。我确实向 Chrome 提交了错误报告 - 我想他们会修复它。 @RobinJohnson:你的问题是 crbug.com/1154281 吗? @EricLaw 是的。这正是问题所在。以上是关于Chrome 87 在 CORS 中针对 Windows IIS 10 的 Windows 身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章
Chrome 上的 NotFound net::ERR_TOO_MANY_REDIRECTS,SEC7127:针对 IE 上的 CORS 请求阻止重定向
Element.insertAdjacentHTML() API 在 chrome 55.0.2883.87 中引发错误
当窗口在 Chrome 87 的后台时,Webdriver.io/Selenium 测试失败