首页 > 解决方案 > Samesite cookie 标志和 ASP 2.1

问题描述

我正在尝试升级我的 ASP .Net Core 2.1 项目,以便它遵守https://devblogs.microsoft.com/aspnet/upcoming-samesite-cookie-changes-in-asp-中描述的新的同站点 cookie 行为net-and-asp-net-core/

我拥有的 2.1 版本具有旧行为。我想将它升级到 2.1 的新版本,其中以下代码实际上会将“samesite=none”放在 set-cookie 标头中的线路上,而不是完全省略相同的站点文本(这是旧行为)

 //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。虽然我不确定这是否是正确的决定

在此处输入图像描述

但只是添加该 lib 似乎对同一站点的行为没有任何影响。它仍然被排除在外。我很确定我上面提到的代码中的位置是正确的区域。SecurePolicy 行工作正常。如果我删除它/放回它,我会看到 set-cookie 中的“安全”文本在提琴手痕迹中来来去去。只是 SameSite 属性似乎没有任何效果。

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

我的项目包如下所示 我只升级了 Microsoft.AspNetCore 在此屏幕截图中的一个。虽然在过去我已经升级了其他一些没有效果。我也瞄准.net 4.8 在此处输入图像描述

这是我的请求/回复。请注意,如果我更改 chrome 设置以尊重旧的相同站点行为,我不会收到 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. 是否需要更新任何其他软件包以获得我想要使用的相同站点行为

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

  3. 你能想到为什么我可能没有在网上得到 samesite=none 的任何原因吗?

标签: asp.net-corecookiessetcookiesamesite

解决方案


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

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

推荐阅读