인증을 사용하는 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
}
관련 항목
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
ASP.NET Core