Что такое CORS в C#

CORS (Cross-Origin Resource Sharing) — это механизм безопасности, который позволяет веб-приложениям делать запросы к ресурсам на другом домене. По умолчанию браузеры блокируют такие запросы из-за политики одного источника (Same-Origin Policy), но CORS даёт возможность явно разрешать их.

Как работает CORS

Когда браузер отправляет междоменный запрос, сервер может разрешить или запретить его, отправляя специальные заголовки в ответе. Эти заголовки указывают, какие домены, методы и заголовки разрешены.

Основные заголовки CORS

  • Access-Control-Allow-Origin — указывает, какие источники могут обращаться к ресурсу.
  • Access-Control-Allow-Methods — определяет разрешённые HTTP-методы (GET, POST, PUT и др.).
  • Access-Control-Allow-Headers — указывает, какие заголовки могут передаваться в запросе.
  • Access-Control-Allow-Credentials — разрешает отправку кук и заголовков авторизации.

Предварительные запросы (Preflight)

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

Настройка CORS в ASP.NET Core

В ASP.NET Core CORS настраивается через middleware. Можно указать, какие домены, методы и заголовки разрешены для определённых конечных точек API.

Пример настройки CORS в Program.cs:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowSpecificOrigin",
        policy => policy.WithOrigins("https://example.com")
                        .AllowAnyMethod()
                        .AllowAnyHeader());
});

var app = builder.Build();

app.UseCors("AllowSpecificOrigin");
app.UseAuthorization();
app.MapControllers();

app.Run();

Безопасность при настройке CORS

  • Не указывать * в Access-Control-Allow-Origin, если требуется защита данных.
  • Ограничивать доступ к API только для доверенных доменов.
  • Разрешать куки и заголовки авторизации только при необходимости.
  • Контролировать методы и заголовки, доступные клиентам.

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