Как включить Cors для каждого типа запроса в asp. net core 3.1 - PullRequest
2 голосов
/ 11 марта 2020

Как включить Cors для каждого типа запроса в asp. net core 3.1?

Я следую за MS Docs , но, похоже, они не работают.

Примечание: я могу получить cors для определенных c доменов, но не для каждого домена. Например, приведенная ниже конфигурация, которую я применил к своему проекту:

  1. В методе ConfigureServices(); я добавил:

    services.AddCors ();

  2. В методе Configure() я добавил:

    app.UseCors (builder => {builder .WithOrigins () .AllowAnyMethod () .AllowAnyHeader () .AllowCredentials ();}) ;

Но когда я пытаюсь получить доступ к API с помощью jQuery из другого URL-адреса, я получаю:

Доступ к XMLHttpRequest по адресу https://localhost: 44314 / Резервирование 'от источника' https://localhost: 44361 'было заблокировано политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: Нет' Access-Control- Заголовок Allow-Origin 'присутствует в запрашиваемом ресурсе.

Теперь, если я добавлю URL в метод WithOrigins (), я получу доступ к API:

app.UseCors(builder =>
{
    builder
    .WithOrigins("https://localhost:44361")
    .AllowAnyMethod()
    .AllowAnyHeader()
    .AllowCredentials();
});

Мой вопрос заключается в том, как предоставить доступ к API для каждого URL (то есть домена, субдомена и т. Д. c) без ограничений. Применение * не работает.

Пожалуйста, помогите.

Ответы [ 2 ]

2 голосов
/ 11 марта 2020

Это должно быть хорошо для вас. Просто игнорируйте часть MVC, которую я просто добавляю, чтобы убедиться, что ваш конвейерный порядок правильный

public void ConfigureServices(IServiceCollection services)
{
      services.AddCors();
      services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseCors(
        options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()
    );

    app.UseMvc();
}
2 голосов
/ 11 марта 2020

вам нужно разрешить любой источник, который вы делаете со следующим:

builder.AllowAnyOrigin()

Любой источник с AllowCredentials

, не разрешающий учетные данные Быть отправленным из любого источника является намерением.

Вы можете обойти это, используя следующее

builder.SetIsOriginAllowed(_ => true)

Я не думаю, что это отличное решение, поскольку оно устраняет выгоду useCredentials ().

Примечание

useCredentials не требуется для отправки JWT в заголовке. Это для, если вам нужно отправить куки в запросе. Разрешение любого источника и включение useCredentials может привести к уязвимостям безопасности, поэтому по умолчанию это не разрешено.

Для получения дополнительной информации вы должны прочитать

Что именно делает заголовок Access-Control-Allow-Credentials?

и

CORS: невозможно использовать подстановочный знак в Access-Control-Allow-Origin, когда флаг учетных данных установлен правда

...