Asp.Net Core WebAPI, развернутый в Azure, не выдает установленные вручную файлы cookie, а работает локально? - PullRequest
0 голосов
/ 07 июля 2019

Чтобы не хранить Jwt в браузере, я храню jwt внутри файла cookie, настроенного так:

`
HttpOnly = true,
SameSite = SameSiteMode.Strict,
IsEssential = true
`

Затем я запускаю перехватчик как часть моего конвейера запросов и проверяю, есть ли во входящем запросе cookie-файл, если он есть, затем я удаляю cookie-файл и добавляю заголовок "Authorization" к запросу с содержимым печенье, которое является самой JWT.

Эти конфигурации cookie отлично работают на моей локальной машине в процессе разработки. Однако, как только я разверну приложение в Azure. Веб-API больше не выдает эти файлы cookie.

В моем файле Api Startup.cs веб-интерфейса Asp.Net Core у меня есть следующий метод ConfigureServices:

`
services.ConfigureApplicationCookie(options =>
      {
        options.Events.OnRedirectToAccessDenied = ReplaceRedirector(HttpStatusCode.Forbidden, options.Events.OnRedirectToAccessDenied);
        options.Events.OnRedirectToLogin = ReplaceRedirector(HttpStatusCode.Unauthorized, options.Events.OnRedirectToLogin);

        options.SlidingExpiration = true;
      });
`

`
services.AddAuthentication(options =>
      {
        options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
      })
      .AddJwtBearer(configureOptions =>
      {
        configureOptions.ClaimsIssuer = jwtAppSettingOptions[nameof(JwtIssuerOptions.Issuer)];
        configureOptions.TokenValidationParameters = tokenValidationParameters;
        configureOptions.SaveToken = true;
        // In case of having an expired token
        configureOptions.Events = new JwtBearerEvents
        {
          OnAuthenticationFailed = context =>
          {
            if (context.Exception.GetType() == typeof(SecurityTokenExpiredException))
            {
              context.Response.Headers.Add(TokenOptionsStrings.ExpiredToken, "true");
            }
            return Task.CompletedTask;
          }
        };
      });
`

Тогда в моем Configure.cs файле:

`
app.UseMiddleware<JwtBearerMiddleware>()
          .UseCors("AllowAll")
          .UseAuthentication()
          .SeedDatabase()
          .UseHttpsRedirection()
          .UseMvc();
`

Затем я успешно выдаю куки при успешной регистрации:

`
response.Cookies.Append(cookieName, token.access_token, _cookieOptions);
`

Где _cookieOptions такие же, как указано выше.

Есть идеи, почему мои cookie-файлы могут не появляться при развертывании в Azure?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...