Я не могу заставить 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](https://i.stack.imgur.com/sUnxW.png)
... и при последующих запросах к серверу этот 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, полученные через другой порт, из приложения, работающего на том же хосте?но другой порт?
Спасибо.