Samesite cookie 标志和 ASP 2.1

Samesite cookie flag and ASP 2.1

我正在尝试升级我的 ASP .Net Core 2.1 项目,以便它将遵守 https://devblogs.microsoft.com/aspnet/upcoming-samesite-cookie-changes-in-asp-net-and-asp-net-core/

中描述的新的同站点 cookie 行为

我的 2.1 版本有旧行为。我想把它升级到 2.1 的新版本 以下代码实际上会将“samesite=none”放在 set-cookie header 中的线路上,而不是完全遗漏 samesite 文本(这是旧行为)

 //options is of type SessionOptions
    options.Cookie.SameSite = SameSiteMode.None;
    options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;

我相信我想要的版本是 https://dotnet.microsoft.com/download/dotnet-core/2.1 的 v2.1.14, 但是当我进入 nuget 包管理器时,我没有看到 v2.1.14 的选项。我看下面。我选择2.1.6是因为我猜2.1.14中SDK的版本是2.1.607。虽然我不确定这是不是正确的决定

但仅添加该库似乎对同一站点行为没有任何影响。它仍然被排除在外。我很确定我上面提到的代码中的位置是正确的区域。 SecurePolicy 行工作正常。如果我将 it/put 重新删除,我会看到 set-cookie 中的“安全”文本在 fiddler 跟踪中来来去去。只是 SameSite 属性 好像没有效果。

我已经将抓取的 aspnetcore 版本提高到 2.1.7 甚至 2.2(虽然我还不想走那么远)但仍然得到相同的行为。就像它被卡在使用旧版本的 asp .net core.

我的项目包如下所示我只升级了此屏幕截图中的 Microsoft.AspNetCore 一个。虽然过去我已经升级了其他一些但没有效果。我还针对 .net 4.8

这是我的request/response。请注意,如果我更改 chrome 设置以尊重旧的 samesite 行为,我不会收到 400 错误的响应。我得到的是 302 found resposne。我希望在 SetCookie.

中看到我的应用响应中的 samesite=none
GET /worksite/authorized?code=e2fqpnolfjtOdEFOWWdDBkDYMKy8wr HTTP/1.1
Host: localhost:44396
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: navigate
Sec-Fetch-Dest: iframe
Referer: https://localhost:44396/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

-----

HTTP/1.1 400 Bad Request
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Server: Kestrel
Set-Cookie: .AspNetCore.Session=VALIDSESSIONID%; path=/; secure; httponly
Persistent-Auth: true
X-Powered-By: ASP.NET
Date: Wed, 20 Jan 2021 14:19:27 GMT
Content-Length: 0

所以我的问题是

  1. 对于 Microsoft.AspNetCore 包,我应该从 Nuget 获取什么版本?

  2. 是否需要更新任何其他软件包以获得我想要使用的 samesite 行为

    //options是SessionOptions类型 options.Cookie.SameSite = SameSiteMode.None;

  3. 你能想出我无法通过网络获取 samesite=none 的任何原因吗?

为了在线获得 samesite=none 我必须将所有 ASPNetCore 2.1 包升级到它们的 2.2 等效包。

无法弄清楚什么与什么一起工作的版本号。我本来希望将东西保持在 2.1,但为了确保我有匹配的库,我不得不转到 2.2

然后出于某种该死的原因我不得不添加一个全新的包。 Microsoft.Net.Http.Headers 版本 2.2.8.

由于您似乎在 ASP.NET Core 2.1 应用程序中以 .NET Framework 为目标,因此缺少一个小但重要的部分:您需要将 2 个 NuGet 包更新到这些版本或更高版本 (source):

<PackageReference Include="Microsoft.Net.Http.Headers" Version="2.1.14" />
<PackageReference Include="Microsoft.AspNetCore.CookiePolicy" Version="2.1.14" />