asp.net-core - 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
所以我的问题是
对于 Microsoft.AspNetCore 包,我应该从 Nuget 获得什么版本?
是否需要更新任何其他软件包以获得我想要使用的相同站点行为
//options 的类型是 SessionOptions options.Cookie.SameSite = SameSiteMode.None;
你能想到为什么我可能没有在网上得到 samesite=none 的任何原因吗?
解决方案
由于您似乎在 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" />
推荐阅读
- android - Firebase 实时数据库仅检索具有用户 ID 的数据
- algorithm - 找到具有到 S 的路径的 N 个最高成本顶点,其中 S 是无向图 G 中的一个顶点
- git - Docker镜像丢弃文件,涉及Sonatype Nexus
- r - read_tsv 将数据错误地解析为 R
- angular - 如何在编译另一个函数时调用一个函数?
- docker - Jenkins 无法在具有特定运行参数的声明性管道中启动 docker 代理容器
- java - 通知不起作用 - Android Studio
- python - 添加具有在两个数据帧上应用 UDF 的结果的列
- ssl - 使用 SSL 连接到已编目 Db2 数据库的 SQLDriverConnect 函数的正确连接字符串是什么?
- servicestack - 从连接表中选择 OrmLite 新对象进行插入