Angular 6 и .NET Core 2.1;браузер не будет делиться файлами cookie через порты - PullRequest
0 голосов
/ 14 февраля 2019

Я не могу заставить Google Chrome отправлять cookie-файл аутентификации AspNetIdentity как часть запроса при запуске моего приложения Angular 6 через порт, отличный от моего API.Я проверил аутентификацию, разместив приложение в минимизированной версии на порте API (в настоящее время: 4213), и оно работает просто отлично.Моё приложение Angular на: 4200 получает куки;это видно в F12 DevTools;он не будет отправлять его как часть запроса GET.

Соответствующие разделы моего конвейера:

    public void ConfigureServices(IServiceCollection services)
    {   
        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme);
        //skipping Identity stuff, but it's there
        services.ConfigureApplicationCookie(options =>
        {
            //options.IdleTimeout = TimeSpan.FromSeconds(10); // for testing only
            options.Cookie.HttpOnly = true; // prevent JavaScript access
            options.Cookie.Expiration = TimeSpan.FromDays(150); // half a year?
            options.Cookie.SameSite = SameSiteMode.None;
        }

        services.AddCors(options => {
            options.AddPolicy(StartupConfiguration.AllowCredentials, builder => {
                builder.WithOrigins("https://localhost:4213", "https://localhost:4200")
                       .AllowAnyHeader()
                       .AllowAnyMethod()
                       .AllowCredentials();
            });
        });
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseCors(StartupConfiguration.AllowCredentials);
        app.UseCookiePolicy(new CookiePolicyOptions {
            MinimumSameSitePolicy = SameSiteMode.None
        });
        // Again, skipping ASP.NET Identity configuration, but it's there.
    }

StartupConfiguration.AllowCredentials - это просто статическое поле, которое возвращает строку «AllowCredentials» (Iпрезирать магические строки).

Методы аутентификации почти не имеют отношения к этой проблеме, потому что они работают просто отлично, но для любопытных, их можно найти здесь .

Домашнее хозяйство:

Этот вопрос имеет схожий вид, но проблема в другом;Я получаю печенье просто отлично, но браузер не отправляет его.

На этот вопрос есть ответ, который, по-видимому, подразумевает, что у меня вообще не должно быть этой проблемы, так как единственным доменом является localhost.Тем не менее, я.

Этот вопрос был полезен, но с тех пор я удалил свойство Lax из поля файла cookie SameSite, и у меня все еще остается та же проблема.

Иллюстрация проблемы:

Запустить приложение: 4213 через dotnet run.Перейдите к маршруту моего приложения /welcome.Нажмите Войти.Я перенаправлен на страницу входа, размещенную на том же порту.Я вхожу, это успешно, я снова перенаправлен на маршрут /welcome, но на этот раз он видит, что я вошел в систему. В моем браузере есть файл cookie:

Success

... и при последующих запросах к серверу этот cookie автоматически отправляется.

Okay;Итак, я открываю новый терминал и запускаю

ng serve --host 0.0.0.0 --ssl true --ssl-key ./ssl/server.key --ssl-cert ./ssl/server.crt --configuration local-dev

..., который запускает то же приложение с тем же кодом, доступным для просмотра через: 4200, используя тот же протокол, что и приложение .NET Core.Я удаляю cookie, только для удовольствия (но это не имеет значения, потому что, даже если я сохраняю cookie, он не работает).:4200/welcome -> :4213/id/login -> :4200/welcome (авторизован).У меня теперь тот же cookie, который я только что удалил , но когда экран /welcome пытается определить, вошел ли он в систему, нажав метод Authorize (см. Ссылку выше), он не будет отправлятьcookie !

Короче говоря, даже если я получаю cookie, и он устанавливается, мой браузер не будет отправлять его.Я также попробовал Safari.Основываясь на информации в других вопросах, я не понимаю, почему я испытываю эту проблему.Буду признателен за любую помощь.

Просто, чтобы быть понятным, мой вопрос:

Как я могу заставить свой браузер отправлять cookie, полученные через другой порт, из приложения, работающего на том же хосте?но другой порт?

Спасибо.

1 Ответ

0 голосов
/ 14 февраля 2019

Вы установили RequestOptions свойство withCredentials на true?

Если вы не установили значение true, браузер не прикрепляет cookie в запросе.

Подробнее: RequestOptions # withCredentials

...