Samesite cookie 标志和 ASP 2.1

时间:2021-01-20 15:16:13

标签: asp.net-core cookies setcookie samesite

我正在尝试升级我的 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 标头中的线路上,而不是完全省略相同站点的文本(这是旧行为)

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

enter image description here

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

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

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

这是我的请求/响应。请注意,如果我更改 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. 是否需要更新任何其他软件包以获得我想要使用的相同站点行为

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

为了在网络上获得 samesite=none,我必须将所有 ASPNetCore 2.1 包升级到它们的 2.2 等效版本。

与无法弄清楚的东西的版本号。我本来希望将东西保持在 2.1,但要确保我有匹配的库,我必须转到 2.2

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