可能导致相关Cookie无法在特定设备上返回的原因

问题描述 投票:0回答:1

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

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

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

因此,我们试图找出可能导致这些特定设备发生故障的原因。同样,这似乎只是在最近才开始发生,并且我们无法确定是什么改变可能触发了这一方面。

更新1

将iPad从iOS 12更新到iOS 13解决了该问题。

asp.net-core identityserver4 google-openid
1个回答
2
投票

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

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

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

[This blog post]详细解释了这种情况,但总之:

  • Chrome v80将在set-cookie未指定SameSite值时开始默认为Lax,而不是默认为None
  • [设置cookie的SameSite=None时,ASP.NET Core不会将SameSite值发送到set-cookie,假设浏览器默认为None
  • [从v2.2.8开始,ASP.NET Core始终发送SameSite=None
  • iOS 12和macOS 10.14 Mojave上的Safari将SameSite=None视为SameSite=Strict(有关详细信息,请参见this webkit bug
  • 因此,我们的关联cookie在这些OS上被视为严格,这意味着它们不会按预期发送回。

尽管我们可以恢复到2.2.7,但即将发布的Chrome更新(80)将停止运行。幸运的是,this article清楚地说明了正确的操作过程:我们需要实现用户代理嗅探,而不要将SameSite=None发送给不支持它的用户代理。 This comment提到了要过滤的建议用户代理,看起来不错。

© www.soinside.com 2019 - 2024. All rights reserved.