Chrome 97 - Cookie 未从 Office 365 OAuth 回调中设置

Chrome 97 - Cookie not setting from Office 365 OAuth callback

我有一个应用 运行ning 多年,代码没有任何变化。该应用程序具有 OAuth2.0 登录功能,包括 Google Workspace 和 Office 365。自 Chrome V97 发布以来(即最近几天),O365 登录功能已停止工作,至于由于某种原因,身份验证 cookie 未在 OAuth 回调 GET 处理程序中设置。设置 cookie 的代码与 运行 用于 Google Workspace 的代码相同,但这有效。它也适用于 Firefox。关于 Google Chrome V97 的一些事情正在阻止设置 cookie,但前提是它首先往返于 O365。

为了隔离问题,我创建了一个人工设置 cookie 的假回调,从而消除了所有的身份验证复杂化。如果我通过在浏览器中访问 URL 来调用它,则 cookie 会按预期设置。但是,如果我先执行 O365 OAuth 舞蹈,这又会调用此 URL,则不会设置 cookie。使用 Google Workspace 尝试完全相同的操作,它起作用了。

我已经为此调试了好几个小时,并清除了所有想法。

任何人都可以阐明导致这种奇怪行为的原因吗?

我们 运行 也参与其中,通过将 SameSite=none; 添加到身份验证 cookie 来修复。在 Chrome 97 中,如果缺少 SameSite,则设置为 Lax。在这里查看更多 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite

可以确认添加 SameSite=none 对我也有效。

对于在 .Net Core Identity 应用程序中看到此问题的任何人,请确保您配置的是 ExternalCookie,而不是 ApplicationCookie。这是相关代码:

services.ConfigureExternalCookie(options =>
{
    options.Cookie.SameSite = SameSiteMode.None;
});

使用 SimpleSamlPHP 库(以上 v1.19),我们需要将 samesite.cookie 设置为 'none' 和 secure.cookie 才能真正解决问题。最近 chrome / chromium 升级到 v97

时发现了这个问题
'session.cookie.secure' => true,
'session.cookie.samesite' => \SimpleSAML\Utils\HTTP::canSetSameSiteNone() ? 'None' : null,

这将在 Chrome 浏览器中将相同的 cookie 站点标志设置为“None”,并在 cookie 上设置“安全”标志。