ASPNET Core — CORS

CORS; Вкратце, CORS означает, что ограничения, налагаемые политикой одинакового происхождения, ослабляются для защиты конечного пользователя браузером. Для получения подробной информации по этому вопросу вы можете обратиться к моей предыдущей статье.

В этой статье мы обсудим темы, связанные с реализацией CORS на стороне ASPNET Core. В основном, файл, с которым мы будем работать, будет program.cs, и здесь мы сделаем необходимые определения.

Давайте запустим приложение, добавив api и mvc проект в пустое решение, чтобы посмотреть на проект.

api url : localhost:7093
mvc url : localhost:7002

Номера портов могут быть разными.

Здесь мы убедимся, что XmlHttpRequest или fetch запросы к api приложению через mvc приложение могут быть сделаны с CORS. Не делая никаких настроек, мы открываем mvc-проект в браузере и получаем следующую ошибку на chrome в результате нашего запроса с fetch api и XmlHttpRequest из chrome devtools -> console.

Этот запрос можно рассматривать как эквивалент ajax-запроса к mvc-приложению с любой страницы api-приложения.


AddDefaultPolicy

Он используется для добавления общей политики и, таким образом, действует на все приложение.

Здесь, используя AllowAny*, мы фактически отключаем политику Same Origin Policy и говорим, что любой запрос может быть сделан из разных источников. Добавление промежуточного ПО UseCors должно быть после UseAuthorisation перед UseRouting.

builder.Services.AddCors(options =>
{
    options.AddDefaultPolicy(policy =>
    {
        policy.AllowAnyHeader()
        .AllowAnyMethod()
        .WithOrigins("https://localhost:7002");
    });
});

Войдите в полноэкранный режим Выход из полноэкранного режима

Для политики, которую мы определяем таким образом, мы говорим, что вы можете делать запросы с https://localhost:7002 только с любым методом или любым заголовком.

Поскольку url не будет соответствовать определению, использующему «/» в конце в форме https://localhost:7002/, mvc-приложение застрянет в политике одинакового происхождения.


AddPolicy

С помощью этого метода мы можем добавить пользовательскую политику и сделать ее действительной для всего проекта с помощью промежуточного программного обеспечения, или мы можем обеспечить ограниченное использование с помощью контроллера или действия. Давайте посмотрим, как оно используется на примерах.

Таким образом, мы можем создавать пользовательские определения политики. Мы указываем, какая политика будет активирована, через имя политики.

Если мы хотим, чтобы добавленная нами политика работала только для определенного контроллера, мы можем применить политику для конкретного контроллера, добавив атрибут [EnableCors] только для этого контроллера. В то же время, хотя соответствующая политика будет работать для каждого действия в контроллере, она не будет работать для действия, которое мы отметили атрибутом [DisableCors].

Когда мы хотим применить политику для отдельного действия, нам достаточно отметить соответствующее действие атрибутом [EnableCors].

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

Programme.cs

ProductController.cs


Маршрутизация конечных точек

Мы можем определить CORS с помощью метода RequireCors в маршрутизации конечной точки.

Применение CORS в приложениях ASPNET Core предназначено для всех видов потребностей, и вы можете разработать политику в соответствии с собственными требованиями перед ее использованием, а затем легко применить ее в своих проектах.

хорошая работа 🙂


XmlHttpRequest

var request = new XMLHttpRequest();
request.open("GET","https://localhost:7093/api/Product")
request.send();

Войдите в полноэкранный режим Выход из полноэкранного режима

fetch api

fetch('https://localhost:7093/api/Product')
  .then(response => response.json())
  .then(data => console.log(data));

Войдите в полноэкранный режим Выход из полноэкранного режима

Источники

  • https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.1

Оцените статью
Procodings.ru
Добавить комментарий