.Net 5 — Файл cookie проверки подлинности не сохраняется при развертывании в IIS

#c# #.net #iis #cookies

Вопрос:

это мой сценарий: у меня есть приложение веб-API .Net5 и приложение React, которое вызывает его API. Процесс аутентификации выполняется с использованием файлов cookie.

Эти строки заданы в моем файле Startup.cs:

 public void ConfigureServices(IServiceCollection services) {  ...  services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)  .AddCookie(_ =gt; { _.Cookie.Name = "_auth"; });  ... }  

Метод контроллера, используемый API входа в систему, является

 [HttpPost("Login")] [AllowAnonymous] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] [SwaggerOperation(Summary = "Login user")] public async Tasklt;ActionResultlt;stringgt;gt; Login([FromBody] UserLogin request, [FromQuery] string returnUrl) {  returnUrl = await this.accountData.LoginAsync(request, returnUrl, HttpContext);  return Ok(new SuccessResultlt;stringgt;(returnUrl, true)); }  

И метод, который выполняет действие входа в систему, является

 private Task PerformSignIn(Listlt;Claimgt; claims, AuthenticationProperties authenticationProperties, HttpContext httpContext) {  string authenticationScheme = this.GetAuthenticationScheme();  ClaimsIdentity claimsIdentity = new ClaimsIdentity(claims, authenticationScheme, USER_CLAIM, null);   return httpContext.SignInAsync(authenticationScheme, new ClaimsPrincipal(claimsIdentity), authenticationProperties); }  

Итак, когда я использую локальную версию своего серверного приложения, размещенного либо в IIS Express, либо в Docker, действие входа в систему работает как заклинание, внешнее приложение вызывает API, который возвращает 200, и при этом файлы cookie _auth сохраняются в браузере.

Проблема

Затем я разместил серверное приложение на тестовом сервере IIS с помощью папки «Опубликовать через». Это приложение находится на веб-сайте и использует выделенный пул приложений. Я изменил конечную точку, используемую внешним приложением, чтобы она работала с помощью размещенного приложения IIS, оно использует протокол http. Вызывается логин, и он возвращает 200 с правильной полезной нагрузкой, но файл cookie _auth не установлен, и последующие вызовы завершаются ошибкой с ответом 401.

Я не могу понять, почему файл cookie не сохраняется в браузере при развертывании в IIS.

Обновить

Я попытался создать новый веб-сайт в IIS, который использует в качестве цели папку, в которой развернуто приложение .Net5, а не использует его в качестве дополнительного приложения, и таким образом файл cookie правильно сохраняется.

Комментарии:

1. Вы работаете по протоколу HTTPS?

2. Нет, как я уже писал, я использую http

3. Если файл cookie помечен как безопасный (как и должно быть для файла cookie идентификации), он не будет отправлен по протоколу HTTP.

4. Попробуйте перейти на https, добавить заголовок cookie_secure и снова протестировать.