Заголовок авторизации отсутствует при обновлении страницы - PullRequest
0 голосов
/ 15 октября 2019

У меня есть решение на C #, состоящее из:

  • Приложение IdentityServer 4
  • .net core 2.2 Web API
  • React SPA

Я вхожу через приложение React, используя поток паролей владельца ресурса Identity Servers. Это работает, и я получаю токен доступа обратно.

Затем я вызываю метод в веб-интерфейсе API, передавая токен доступа:

[Authorize(AuthenticationSchemes = "Bearer")]
public async Task<VMFranchiseGeoJson> GetByAuthorizedUser()
{
   try
      {
       var token = Context.Request.Headers["Authorization"];
       var user = (Context.User.Identity as ClaimsIdentity);
...

При первом входе в систему после входа в систему это работает нормально, и токен содержит токен Bearer и Context.User. Личность содержит претензии. Однако, если я перезагружаю / обновляю страницу, выполняющую этот вызов, она работает в первый или даже несколько раз (кажется, не по истечении заданного интервала и довольно быстро теряет заголовки 2-3 минуты), а затем перестает работатьт.е. заголовок авторизации больше не существует.

Но ...

Он передается при вызове API, например, 'авторизация: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjAzMDg5OTk1YmJkNWVlY2 ... 10 * 10 *' 10 ** Я использую CORS здесь, поскольку это локальная разработка, но я настроил его следующим образом:

services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder => builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials());
        }); 

Вам нужно каким-то образом их сохранить?

Пробовал несколько решений, меняя политики CORS,переписать часть Identity Server, изменить потоки и т. д.

Редактировать для auth config @Alpha:

 services.AddMvcCore().AddRazorViewEngine().AddAuthorization();

        //services.AddAuthentication("Bearer")
        //    .AddIdentityServerAuthentication(options =>
        //    {
        //        options.Authority = "http://localhost:5000";
        //        options.RequireHttpsMetadata = false;
        //        options.ApiName = "api";
        //    });

        services.AddAuthentication("Bearer")
            .AddJwtBearer("Bearer", options =>
            {
                options.Authority = "http://localhost:5000";
                options.RequireHttpsMetadata = false;
                options.Audience = "api";
            });
...