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



我有一个运行多年的应用程序,代码没有更改。该应用程序已在包括谷歌工作区和Office 365在内的各种提供商处登录OAuth2.0。自从Chrome V97发布以来(即在过去几天(,O365登录已经停止工作,因为出于某种原因,在OAuth回调get处理程序中没有设置auth cookie。设置cookie的代码与为Google Workspace运行的代码相同,但这是有效的。它也适用于Firefox。谷歌Chrome V97的某些功能阻止了cookie的设置,但前提是它必须先往返O365。

为了隔离这个问题,我创建了一个伪回调,它手动设置了一个cookie,从而消除了所有身份验证的复杂性。如果我通过访问浏览器中的URL来调用它,那么cookie会按预期设置。然而,如果我先执行O365 OAuth舞蹈,然后调用这个URL,那么cookie就不会设置。在谷歌工作区尝试完全相同的东西,它是有效的。

我已经调试了好几个小时了,并清理出了一些想法。

有人能说明是什么原因导致了这种奇怪的行为吗?

我们也遇到了这种情况,通过将SameSite=none;添加到authcookie中来修复。在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设为真正解决问题。最近铬/铬升级到v97 时注意到了这个问题

'session.cookie.secure' => true,
'session.cookie.samesite' => SimpleSAMLUtilsHTTP::canSetSameSiteNone() ? 'None' : null,

这将把相同的cookie站点标志设置为"0";无";在Chrome浏览器中;"安全";Cookie上的标志。

最新更新