Поделиться через


Поведение проверки подлинности конечной точки API в ASP.NET Core

При использовании cookie проверки подлинности конечные точки API возвращают соответствующие коды состояния HTTP (например, 401 или 403) для сбоев проверки подлинности вместо перенаправления неавтодентизованных запросов на страницы входа. Это поведение, которое более подходит для программного доступа к API, было введено в ASP.NET Core в .NET 10.

Определение конечных точек API ASP.NET Core

ASP.NET Core автоматически применяет это поведение к конечным точкам, которые он распознает как связанные с API, включая:

  • Контроллеры, украшенные атрибутом [ApiController]
  • Минимальные конечные точки API, зарегистрированные в MapGet, MapPost, MapPutи MapDeleteт. д.
  • Конечные точки, которые явно запрашивают ответы JSON
  • SignalR центры и конечные точки

Поведение и настройка по умолчанию

По умолчанию ASP.NET Core применяет cookie логику проверки подлинности на основе типа конечной точки:

  • Веб-страницы: перенаправление на страницы входа
  • Конечные точки API: возвращает коды состояния 401 или 403 без перенаправлений

Настройка поведения

Хотя поведение по умолчанию работает для большинства сценариев, его можно настроить при необходимости:

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.LoginPath = "/Account/Login";
        // The framework automatically handles API endpoints
        // No additional configuration needed
    });

Если необходимо переопределить автоматическое обнаружение для определенных конечных точек, используйте [Authorize] атрибут с определенными схемами проверки подлинности или реализуйте пользовательские обработчики проверки подлинности.

Вопросы миграции

Это изменение поведения, введенное в .NET 10, предназначено для неисключаемых для существующих приложений:

  • Веб-приложения: продолжайте работать, как и раньше, с перенаправлениями страниц входа
  • Смешанные приложения: конечные точки API получают правильные коды состояния, а веб-страницы получают перенаправления
  • Приложения, доступные только для API: преимущество от соответствующих кодов состояния HTTP без дополнительной настройки

Тестирование конечных точек API

После обновления до ASP.NET Core 10 убедитесь, что конечные точки API возвращают соответствующие коды состояния:

[Test]
public async Task UnauthorizedApiRequest_Returns401()
{
    var response = await client.GetAsync("/api/secure-data");
    Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);
    Assert.False(response.Headers.Location != null); // No redirect
}