Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set SameSite cookie attribute to explicit None ASP NET Core

Chrome 76 will begin to support an explicit SameSite: None attribute

https://web.dev/samesite-cookies-explained/

I found that the current implementation of ASP.NET Core treats SameSiteMode.None as a no-op and does not send any attribute. How can I add a custom attribute to a cookie and thereby add an explicit SameSite: None to the cookie text?

Appending the attribute to the cookie value does not work as HttpResponse.Cookies.Append url-encodes the cookie value.

like image 975
dmi_ Avatar asked May 09 '19 20:05

dmi_


4 Answers

Same issue occurs in ASP.NET as in ASP.NET Core.

Until Microsoft produce a fix, a hack that's working for me is to replace

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

with

myCookie.Path = "/; SameSite=None";

This adds SameSite=None to the set-cookie header in the HTTP response.

like image 162
GStephens Avatar answered Oct 10 '22 14:10

GStephens


It's now fixed in latest release of all versions of .NET Framework and .NET Core (https://github.com/aspnet/AspNetCore/issues/12125)

I have multiple projects running on .NET Core 2.2 and after upgrading to 2.2.207, I don't have the problem anymore.

Here a sample code present in ConfigureServices method of Startup.cs file

services.ConfigureApplicationCookie(options => {
     options.Cookie.SameSite = SameSiteMode.None;
});
like image 37
Xavierh Avatar answered Oct 10 '22 15:10

Xavierh


[Edit] If you are using all dlls and packages from nuget, you have to ensure Microsoft.Net.Http.Headers is in version 2.2.8 of above.

After last KB from microsoft in 10 december 2019, It should be fixed in .net framework and dotnetcore.

see:

  1. https://learn.microsoft.com/en-us/aspnet/samesite/system-web-samesite
  2. https://learn.microsoft.com/en-us/aspnet/samesite/kbs-samesite
like image 23
Ygalbel Avatar answered Oct 10 '22 15:10

Ygalbel


response.Headers.Append("set-Cookie", $"{cookieName}={cookieValue}; path=/; SameSite=None; Secure"); seems to work as expected.

I tested this by enabling same-site-by-default-cookies and cookies-without-same-site-must-be-secure in Chrome Dev 76

like image 3
dmi_ Avatar answered Oct 10 '22 14:10

dmi_