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

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

Я слежу за Документами MS но они вроде не работают.

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

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

    services.AddCors ();

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

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

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

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

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

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

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

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


person yogihosting    schedule 11.03.2020    source источник


Ответы (2)


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

builder.AllowAnyOrigin()

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

запрет на отправку учетных данных из любого источника является преднамеренным.

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

builder.SetIsOriginAllowed(_ => true)

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

Примечание

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

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

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

а также

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

person Kevin    schedule 11.03.2020
comment
Я пробовал это, но получаю ошибку: «Протокол CORS не позволяет одновременно указывать подстановочный знак (любой) и учетные данные. Сконфигурируйте политику CORS, указав отдельные источники, если учетные данные должны поддерживаться ». - person yogihosting; 11.03.2020
comment
Это часть дизайна CORS. Когда вы отправляете учетные данные, вам необходимо указать источники, из которых вы разрешите отправлять эти учетные данные - person Kevin; 11.03.2020
comment
Спасибо. Мне также пришлось удалить .AllowCredentials (); чтобы он работал после добавления builder.AllowAnyOrigin (), как вы сказали. - person yogihosting; 11.03.2020
comment
После удаления .AllowCredentials (); Я все еще могу отправить токен JWT в заголовке, поэтому я не думаю, что в этом случае отправка учетных данных предотвращена. - person yogihosting; 11.03.2020
comment
AllowCredentials (); для файлов cookie, насколько известно. Я обновил свой вопрос, чтобы предоставить дополнительную информацию и ссылки на два полезных вопроса. - person Kevin; 11.03.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();
}
person Tony Ngo    schedule 11.03.2020