인가(Authorization)란 인증된 사용자가 특정 리소스(Web API 리소스)에 대해 작업을 수행할 수 있는지 여부를 판단하는 프로세스입니다. 예를 들어, 데이터를 조회하거나 전송할 수 있는 권한이 있는지 확인하는 것도 인가의 일부입니다. 인가 프로세스는 컨트롤러의 액션 메서드가 실행되기 전에 수행되기 때문에, 해당 리소스에 대한 접근을 허용할지 여부를 유연하게 결정할 수 있습니다.
AuthorizeAttribute란?
ASP.NET Web API에서 인가는 컨트롤러 액션 메서드 실행 전에 동작하는 인가 필터(Authorization Filter)를 통해 구현됩니다. Web API는 기본적으로 AuthorizeAttribute라는 내장 인가 필터를 제공합니다.
이 필터는 요청한 사용자가 인증되었는지 검사하며, 인증되지 않은 경우 액션 메서드를 호출하지 않고 즉시 HTTP 상태 코드 401(Unauthorized)을 반환합니다.
이 필터는 다음 세 가지 방식으로 적용할 수 있습니다.
- 전역(Global) — 모든 컨트롤러에 일괄 적용
- 컨트롤러(Controller) — 특정 컨트롤러 전체에 적용
- 액션(Action) — 개별 액션 메서드에만 적용
1. 전역(Global) 적용
모든 Web API 컨트롤러의 접근을 제한하려면 AuthorizeAttribute 필터를 전역 필터 목록에 추가합니다.
public static void Register(HttpConfiguration config){
config.Filters.Add(new AuthorizeAttribute());
}2. 컨트롤러(Controller) 수준 적용
특정 컨트롤러에만 접근을 제한하려면 컨트롤러 클래스에 [Authorize] 속성을 추가합니다. 이 경우 해당 컨트롤러의 모든 액션 메서드에 인가가 요구됩니다.
// 컨트롤러의 모든 액션에 인가 요구
[Authorize]
public class StudentsController : ApiController{
public HttpResponseMessage Get(int id) { ... }
public HttpResponseMessage Post() { ... }
}3. 액션(Action) 수준 적용
특정 액션 메서드에만 접근을 제한하려면 해당 메서드에 속성을 추가합니다. 아래 예제에서는 Get은 누구나 호출할 수 있지만, Post는 인가된 사용자만 호출할 수 있습니다.
public class StudentsController : ApiController{
public HttpResponseMessage Get() { ... }
// 특정 액션에만 인가 요구
[Authorize]
public HttpResponseMessage Post() { ... }
}전체 예제
using System.Web.Http;
namespace DemoWebApplication.Controllers{
public class DemoController : ApiController{
[Authorize]
public IHttpActionResult Get(){
return Ok();
}
}
}위 예제처럼 액션 메서드에 [Authorize] 속성을 추가했다면, 해당 메서드에 접근하기 위해서는 Bearer 토큰, API 키, OAuth 등과 같은 적절한 인증 방식을 함께 사용해야 합니다. 인증 없이 접근을 시도하면 아래와 같이 401 Unauthorized 응답이 반환됩니다.
