. Net Core 3.1 SPA авторизация не удалась - PullRequest
0 голосов
/ 19 апреля 2020

У меня возникла проблема, чтобы позвонить авторизовать API от реагировать SPA. Это работает, если удалить атрибут [Authorize] в контроллере / действии, но после добавления в атрибут ответ переходит на домашнюю страницу SPA.

Структура проекта

  • IdentityServer (. net core 3.1 mvc с IdentityServer4 * типом ссылочного токена)

  • Вход в систему (аутентификация с IdentityServer и авторизация обратного вызова на портал)

  • Портал (. net core 3.1 реагирует SPA, используйте IdentityServer4.AccessTokenValidation для проверки

реаги

fetch('/api/test').then(async (response) => {  
  var data = await response.json();
  console.dir(response);
  console.dir(data);
});

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

    services.AddControllersWithViews()
        .ConfigureApiBehaviorOptions(options => { options.SuppressModelStateInvalidFilter = true; });

    services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
        .AddIdentityServerAuthentication(options =>
            {
                options.Authority = "https://localhost:44302";
                options.ApiName = "api1";
                options.ApiSecret = "thisissecret";
            });

    services.AddSpaStaticFiles(configuration => { configuration.RootPath = "ClientApp/build"; });
}

public override void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    app.UseStaticFiles();
    app.UseSpaStaticFiles();
    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); });
    app.UseSpa(spa =>
        {
            spa.Options.SourcePath = "ClientApp";
            if (_WebHostEnvironment.IsDevelopment())
            {
                spa.UseReactDevelopmentServer("start");
            }
        });
}

Работает, если контроллер API не имеет атрибута «Авторизовать», но после добавления в него будет держать неавторизованным.

1 Ответ

1 голос
/ 20 апреля 2020

Извините, ребята, это моя ошибка, которую я пропустил, чтобы установить ApiSecret в IdentityServer. Поэтому он остается неподтвержденным.

new ApiResource("api1", )
{
    // the missing part
    ApiSecrets = {
        new Secret("thisissecret".Sha256())
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...