Проблема CORS с пользовательским контроллером и CustomClientStore в IdentityServer4

#asp.net-core #cors #identityserver4

#asp.net-core #cors #identityserver4

Вопрос:

Я хочу добавить пользовательскую конечную точку в IdentityServer4, но когда я вызываю API с другого сайта, у меня возникает ошибка CORS. Я использую CustomClientStore для загрузки своих клиентов, поэтому мне нужно добавить CustomCorsPolicyService

 Access to XMLHttpRequest at 'http://localhost:8082/embedded/log' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
  

При запуске я добавляю свой CustomClientStore и CustomCorsPolicyService

 public void ConfigureServices(IServiceCollection services)
{
    ...
    CustomClientStore.Init(_Configuration);

    var builder = services.AddIdentityServer()
        .AddInMemoryIdentityResources(Config.GetIdentityResources())
        .AddInMemoryApiScopes(Config.GetApiScopes())
        .AddRedirectUriValidator<MyUriValidator>();

    builder.Services.AddSingleton<IUserRepository, UserRepository>();
    builder.AddProfileService<CustomProfileService>();

    builder.AddClientStore<CustomClientStore>();
    //services.AddCors(setup => setup.AddDefaultPolicy(b => b.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()));

    builder.AddCorsPolicyService<CustomCorsPolicyService>();
    ...
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
        app.UseDeveloperExceptionPage();
    
    app.UseStaticFiles();
    
    // Add this before any other middleware that might write cookies
    app.UseCookiePolicy();
    
    app.UseIdentityServer();
    
    app.UseRouting();
    app.UseCors();
    app.UseMvcWithDefaultRoute();
    
    // This will write cookies, so make sure it's after the cookie policy
    app.UseAuthentication();
}
  

В моем контроллере

 
[ApiController]
public sealed class EmbeddedLogController : ControllerBase
{
    [HttpPost]
    [Route("/embedded/log/")]
    [EnableCors()]
    public ActionResult Log(ParametersLog parameters)
    {
        ....
    }
}
  

Без CustomClientStore я мог бы позвонить services.AddCors(setup => setup.AddDefaultPolicy... , чтобы принять CORS
Но теперь мне нужно использовать builder.AddClientStore<CustomClientStore>(); из-за CustomProfileService.

Как я могу это исправить? Спасибо

Ответ №1:

эта проблема с GitHub может дать вам некоторые подсказки.

Это говорит:

Решаемая При использовании CORS маршрутизации конечных точек и IdentityServer4 вызов UseCors() должен выполняться после UseRouting(), но ПЕРЕД UseIdentityServer() и UseAuthorization(). В противном случае он будет работать, но предполетные проверки завершатся неудачей