다음을 통해 공유


ASP.NET Core의 API 엔드포인트 인증 동작

인증을 사용하는 cookie 경우 API 엔드포인트는 인증되지 않은 요청을 로그인 페이지로 리디렉션하는 대신 인증 실패에 대해 적절한 HTTP 상태 코드(예: 401 또는 403)를 반환합니다. 프로그래밍 방식 API 액세스에 더 적합한 이 동작은 .NET 10의 ASP.NET Core에서 도입되었습니다.

ASP.NET Core에서 API 엔드포인트를 식별하는 방법

ASP.NET Core는 다음을 포함하여 API 관련으로 인식하는 엔드포인트에 이 동작을 자동으로 적용합니다.

  • 특성으로 [ApiController] 데코레이팅된 컨트롤러
  • , MapGetMapPost, MapPut등으로 MapDelete등록된 최소 API 엔드포인트
  • 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
}