什么可能导致相关 cookie 无法在特定设备上返回

Mar*_*nte 5 google-openid asp.net-core identityserver4

我们有一些用户无法通过 Google 连接到我们的平台。发生这种情况时,总是针对特定设备,但根据我们目前掌握的信息,并非所有设备类型都相同(有待确认)。

我们正在使用 ASP.NET Core(和 Identity Server 4)。

我们这边的错误是从 oauth 流返回后,由 ASP.NET 标识设置的相关 cookie 消失了。我们已经验证它在开始时设置得很好,并且是有效的。这不是关于数据保护的问题(我们确实有这个问题)。无论我们尝试连接哪个帐户,我们都可以在装有 iOS 12 的两台 iPad 上进行复制。所有这些帐户都可以连接到其他设备,包括装有 iOS 13 的 iPad。

因此,我们正在尝试隔离可能导致这些特定设备出现故障的原因。此外,这似乎是最近才开始发生的,我们无法确定是什么变化可能在我们这边触发了这种情况。

更新 1

将 iPad 从 iOS 12 更新到 iOS 13 可以解决此问题。

Cag*_*das 19

也许您可以在 AddOpenIdConnect("") 中使用此代码。

如果您使用 .net core > 2.*

options.NonceCookie.SameSite = (SameSiteMode) (-1); 
options.CorrelationCookie.SameSite = (SameSiteMode) (-1); 
Run Code Online (Sandbox Code Playgroud)

如果您使用 .net > 3.*

options.NonceCookie.SameSite = SameSiteMode.Unspecified;
options.CorrelationCookie.SameSite = SameSiteMode.Unspecified;
Run Code Online (Sandbox Code Playgroud)


Mar*_*nte 6

2019/11/19,.NET Core v2.2.8 发布。此版本包含此更改,在补丁说明中提到:

风险:中等。众所周知,SameSite 更改与较旧的操作系统和浏览器不兼容,尤其是 iOS 12 和 OSX Mojave(最新版本 - 1)。这些代表了 Web 客户端用户群中一小部分但有影响力的部分。更新到最新的操作系统版本解决了不兼容问题。

由于我们的 Docker 映像基于mcr.microsoft.com/dotnet/core/aspnet:2.2,因此发生在 12 月 3 日的无关更新将该更新推送到我们的服务器。

这篇博文更详细地解释了这种情况,但简而言之:

  • 当 a未指定值时,Chrome v80 将开始默认为Lax,而不是默认为set-cookieSameSiteNone
  • 设置 cookie 时,假设浏览器默认为SameSite=None,ASP.NET Core 不会将SameSite值发送set-cookieNone
  • 从 v2.2.8 开始,ASP.NET Core 总是发送 SameSite=None
  • iOS 12 和 macOS 10.14 Mojave 上的 SafariSameSite=None视为SameSite=Strict(有关详细信息,请参阅此 webkit 错误
  • 因此,我们的相关 cookie 在这些操作系统上被严格对待,这意味着它们不会按预期发回。

虽然我们可以恢复到 2.2.7,但即将到来的 Chrome 更新 (80) 将停止工作。幸运的是,这篇文章清楚地说明了正确的行动方案:我们需要实现用户代理嗅探,而不是发送SameSite=None给不支持它的用户代理。这条评论提到了建议的用户代理进行过滤,看起来不错。