C# 如何将SameSite cookie属性设置为显式无ASP网络核心

C# 如何将SameSite cookie属性设置为显式无ASP网络核心,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,Chrome 76将开始支持显式的SameSite:None属性 我发现ASP.NET核心的当前实现将SameSiteMode.None视为无操作,并且不发送任何属性。如何向cookie添加自定义属性,从而向cookie文本添加显式的SameSite:None 将属性附加到cookie值不能像HttpResponse.Cookies.Append url那样对cookie值进行编码。response.Headers.Append(“设置cookie”,$”{cookieName}={cooki

Chrome 76将开始支持显式的
SameSite:None
属性

我发现ASP.NET核心的当前实现将
SameSiteMode.None
视为无操作,并且不发送任何属性。如何向cookie添加自定义属性,从而向cookie文本添加显式的
SameSite:None


将属性附加到cookie值不能像HttpResponse.Cookies.Append url那样对cookie值进行编码。

response.Headers.Append(“设置cookie”,$”{cookieName}={cookieValue};path=/;SameSite=None;Secure”)似乎按预期工作


我通过在Chrome Dev 76中启用默认的
同一站点Cookie
没有相同站点的Cookie必须是安全的
,在ASP.NET中与ASP.NET Core中出现相同的问题来测试这一点

在微软提出修复方案之前,对我有效的黑客手段将取代

myCookie.Path = "/";
myCookie.SameSite = SameSiteMode.None;     // has no effect


这会将
SameSite=None
添加到HTTP响应中的
set cookie
头中。

现在所有版本的.NET Framework和.NET Core()

我有多个项目在.NETCore2.2上运行,升级到2.2.207后,我不再有这个问题了

下面是
ConfigureServices
启动方法.cs
文件中的示例代码

services.ConfigureApplicationCookie(options => {
     options.Cookie.SameSite = SameSiteMode.None;
});
[编辑] 如果您使用的是nuget的所有DLL和包, 您必须确保Microsoft.Net.Http.Headers在上述版本的2.2.8中

在2019年12月10日微软发布最后一个KB之后, 它应该在.net framework和dotnetcore中修复

见:


  • 其他答案提到了.Net核心修复,所以我跳过了这一部分

    Net Framework修复程序是通过“质量汇总”提供的

    是.NET4.8的知识库

    是.Net 4.7.2的知识库


    是相关的MSDN源。

    看不到任何关于.NET Framework已修复此问题的引用-该链接是针对ASP.NET Core的。@FrodeNilsen您找到它是否已在.NET Framework中更新了吗?我已经更新到4.8,现在仍然有这个problem@MichaelHancock据我所知,没有修复,但请参阅下面Ygabel的答案。@MichaelHancock查看我对.Net Framework的答案:2019年12月后,检查我的答案我的ASP.Net Core v2.2应用程序绝对不会输出SameSite=None cookie(除非按照@dmi_u建议手动设置标头)-任何这样做的尝试都会导致未指定的SameSite值。按照您的建议安装Microsoft.Net.Http.Headers解决了此问题。即使升级到.Net Framework 4.8并访问了HttpCookie.SameSite属性,HttpResponseMessage在代码中使用的CookieHeaderValue类仍然没有此属性可用。这个黑客可能很难看,但最终对我起了作用。谢谢
    services.ConfigureApplicationCookie(options => {
         options.Cookie.SameSite = SameSiteMode.None;
    });