c# - ASP.NET Core 省略的 SameSite Cookie 属性
问题描述
我正在尝试使用 ASP.NET Core 将 cookie 的 SameCookie 属性显式设置为 None。
我尝试这样做的方法是设置 CookieOptions 的属性值,如下所示:
var options = new CookieOptions
{
SameSite = SameSiteMode.None
};
(其他属性为简洁省略)
但是,当我检查服务器响应标头(服务器应该使用 SameSite=None 设置 cookie)时,我可以看到 SameSite 被省略了。相反,我可以清楚地看到 Value、Expires、Path 甚至 Secure。
如果我在 C# 代码中将 SameSite 设置为 Lax 或 Strict,我可以看到它明确包含在 Set-Cookie 标头中。如果我将其设置为无 - 我不能。
我确实检查了两个浏览器 - Firefox 和 Chrome 77(我知道此版本对 SameSite 的更改)。
有一个包含 SameSite=None 的技巧。您只需在 CookieOptions 的 Path 属性中添加以下行:
options.Path += "; samesite=None";
然后可以在响应的 Set-Cookie 标头中找到它。
有没有一种方法可以配置 Kestrel(没有用于托管的 IIS,裸 Kestrel)以在标头中包含 SameSite=None 而不会像这样破解它?
解决方案
看起来问题在于,虽然SameSite
Enum 的None
值被解释为根本不提供SameSite
属性的默认值。您可以在只有 和 的标记值的代码SetCookieHeaderValue
中看到这一点。Strict
Lax
要设置SameSite=None; Secure
cookie,您应该Set-Cookie
自己发送标头。
(旁注:我将尝试整理核心的拉取请求以添加适当的None
支持)
推荐阅读
- sql - 带有分页的光滑纯 sql 查询
- javascript - 如何仅映射数组中的每一秒值
- kubernetes - Kubernetes CSI 驱动升级
- mysql - 如何从 MySQL CONCAT 和 GROUP_CONCAT 中跳过 NULL 值
- django - 如何获得为所有用户的 Django 创建的总 pv
- java - java web启动多次请求jar文件
- robotframework - 机器人框架:内置库:应该匹配:如何正确传递模式参数?
- angular - 为了创建模拟,“toPromise()”存在哪些类型?
- java - 为什么 LinkedList.get 会抛出 NPE
- nullpointerexception - 错误:不兼容的类型:NullPointerException 无法转换为 Throwable