我们有些用户无法通过Google连接到我们的平台。发生这种情况时,总是针对特定的设备,但是根据我们到目前为止的信息,并不是所有的设备类型都相同(待确认)。
我们正在使用ASP.NET Core(和Identity Server 4)。
我们这边的错误是,从oauth流返回后,由ASP.NET身份设置的相关cookie消失了。我们已经验证了它在开始时就已经设置好并且有效。这不是关于数据保护的问题(我们确实有此问题)。无论我们尝试连接哪个帐户,我们都可以在两台装有iOS 12的iPad上进行复制。所有这些帐户都可以在其他设备上进行连接,包括具有iOS 13的iPad。
因此,我们试图找出可能导致这些特定设备发生故障的原因。同样,这似乎只是在最近才开始发生,并且我们无法确定是什么改变可能触发了这一方面。
将iPad从iOS 12更新到iOS 13解决了该问题。
[于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]详细解释了这种情况,但总之:
set-cookie
未指定SameSite
值时开始默认为Lax,而不是默认为None
SameSite=None
时,ASP.NET Core不会将SameSite
值发送到set-cookie
,假设浏览器默认为None
SameSite=None
SameSite=None
视为SameSite=Strict
(有关详细信息,请参见this webkit bug)尽管我们可以恢复到2.2.7,但即将发布的Chrome更新(80)将停止运行。幸运的是,this article清楚地说明了正确的操作过程:我们需要实现用户代理嗅探,而不要将SameSite=None
发送给不支持它的用户代理。 This comment提到了要过滤的建议用户代理,看起来不错。