ASP.NET Core 3.1
и Chrome
игнорирует Consent Cookie
.
Когда я тестирую Safari, он работает, но Chrome игнорирует ie через HTTP в моей среде разработки.
В моей производственной среде этого не происходит, и я можно увидеть, что ".AspNet.Consent"
устанавливается с помощью инструментов разработчика Chrome.
Вот код, он не работает для среды "Dev"; В среде prod приложение работает за AWS ELB
, который выполняет HTTPS
и перенаправляет запросы как HTTP
.
Странный бит - мой Auth Cookies
сохраняется в Chrome
для среда «Dev» более HTTP
, используя ту же функцию GetCookieOptions
. Первоначально это также не помогло, но после установки IsEssential
в значение true я смог установить файлы cookie аутентификации.
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
options.OnAppendCookie = cookieContext =>
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
options.OnDeleteCookie = cookieContext =>
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
});
private CookieOptions GetCookieOptions() {
var options = new CookieOptions {
HttpOnly = true, // not accessible via Javascript
Secure = environment.EnvironmentName.Contains("Dev") ? false : true, // only over https
SameSite = environment.EnvironmentName.Contains("Dev") ? SameSiteMode.None : SameSiteMode.Strict, // not sent to different url's
IsEssential = true // required for Chrome
};
return options;
}
private void CheckSameSite(HttpContext httpContext, CookieOptions options)
{
options = GetCookieOptions();
if (options.SameSite == SameSiteMode.None)
{
var userAgent = httpContext.Request.Headers["User-Agent"].ToString();
if (DisallowsSameSiteNone(userAgent))
{
options.SameSite = SameSiteMode.Unspecified;
}
}
}