ASP. NET Core 3.1 и Chrome не сохраняются как pNet .Consent Cook ie через HTTP - PullRequest
0 голосов
/ 18 июня 2020

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;
            }
        }
    }

1 Ответ

0 голосов
/ 18 июня 2020

Подтвердите значение document.cookie после того, как оно было сохранено, не предполагайте, что установка значения для объекта document.cookie будет принята браузером.

например,

После этого строка кода JavaScript выполнена, заданный файл cook ie игнорировался.

document.cookie = button.dataset.cookieString;

значение cookieString:

".AspNet.Consent=yes; expires=Fri, 18 Jun 2021 00:20:57 GMT; path=/; samesite=none"

Проблема была в пределах Chrome сам ...

В Chrome go на этот URL: chrome://settings/content/siteDetails

Найдите хост и очистите файлы cookie для сайта, например localhost

...