У меня возникла проблема, чтобы позвонить авторизовать 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 не имеет атрибута «Авторизовать», но после добавления в него будет держать неавторизованным.