带有 Cookie 的 Asp.net 核心 Chrome 问题

Mi-*_*ter 3 google-chrome razor asp.net-core

我有一个奇怪的问题,我们正在运行一个 asp.net core razor 应用程序。登录 Firefox 或 Edge 没有问题。

但随机地,我们在 Chrome 中有一个我们无法弄清楚的问题。

(随机,以前在用户的机器上随机发生过,现在在很多机器上都发生了,但仍然不是全部

问题是我们的“身份验证令牌”cookie 似乎没有被设置。

对我来说,错误似乎是在用户名和密码成功之后但在重定向之前运行的这一行。

...
Response.Cookies.Append("auth-token", inToken, option);
...
Run Code Online (Sandbox Code Playgroud)

没有错误,但是在跌倒后几乎立即运行的一条线

public async Task Invoke(HttpContext context)
{
    var name = "auth-token";
    var cookie = context.Request.Cookies[name]; //THIS LINE DOESN'T HAVE THE COOKIE CALLED "auth-token" IN CHROME
    ...
}
Run Code Online (Sandbox Code Playgroud)

我们已经尝试过:

隐身 Chrome/清除缓存/Chrome 中的 Cookie

  • 重启机器
  • 卸载和重新安装chrome
  • 安装旧版本的 Chrome (chromium)
  • 运行我们代码的旧版本(以前在 chrome 上运行)

似乎没有明确的原因何时发生此问题。

我很想弄清楚为什么会发生这种情况,或者如果可能的话,我想知道有关如何捕捉正在发生的事情的任何信息。

谢谢!

Mi-*_*ter 5

经过几个小时的研究,我似乎终于解决了我的问题。

通过在我们的 cookie 中设置以下内容

SameSite = SameSiteMode.Lax
Run Code Online (Sandbox Code Playgroud)

或者

SameSite = SameSiteMode.Strict
Run Code Online (Sandbox Code Playgroud)

我们的 Chrome 问题已修复

我正在阅读谷歌浏览器的“SameSite”cookie 选项。

https://www.chromium.org/updates/same-site

最初我认为这无关,因为 SameSite 已经在 Chrome 中被强制使用了很长时间,而且它从来没有打扰过我们的代码。但我仍然尝试设置:

SameSite = SameSiteMode.None
Run Code Online (Sandbox Code Playgroud)

无变化

在向我的老板提出这个问题后,他告诉我他注意到一个旧警告出现在 chrome 控制台中 <1 秒。

'与资源关联的 cookie 设置为 'SameSite=None' 但没有 'Secure'。已经被屏蔽了……”

(注意:这是在我完全尝试使用 SameSite 选项之前,并且是修复 Safari 错误的一些代码的一部分)

所以很自然地,我们设法通过快速屏幕截图捕获了错误,然后我们在 SameSite 选项中添加了 Strict。

所以我虽然现在对我有用,但它仍然没有解释;

  • 为什么它不早点坏掉,我们几个月来一直在使用 chrome 版本
  • 如果我使用 .net 2.1 运行旧版本的代码,为什么它仍然不会中断(没有调整任何 SameSite 选项)
  • 为什么我们的新版本没有调整 SameSite 选项的代码仍然可以在某些用户的机器上运行