#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(). В противном случае он будет работать, но предполетные проверки завершатся неудачей