Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# ASP.NET Web API에서 Authorize Attribute의 역할과 사용법

인가(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 응답이 반환됩니다.

C# ASP.NET Web API에서 Authorize Attribute의 역할과 사용법