首页 > 解决方案 > 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 而不会像这样破解它?

标签: c#asp.net-corecookies

解决方案


看起来问题在于,虽然SameSiteEnum 的None值被解释为根本不提供SameSite属性的默认值。您可以在只有 和 的标记值的代码SetCookieHeaderValue中看到这一点。StrictLax

要设置SameSite=None; Securecookie,您应该Set-Cookie自己发送标头。

(旁注:我将尝试整理核心的拉取请求以添加适当的None支持)


推荐阅读