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

C# ASP.NET Web API에서 CORS 문제 해결하는 방법 총정리

CORS(교차 출처 리소스 공유)란 무엇인가?

CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유)는 추가적인 HTTP 헤더를 사용하여, 한 출처(origin)에서 실행 중인 웹 애플리케이션이 다른 출처의 선택된 리소스에 접근할 수 있도록 브라우저에 허용해 주는 메커니즘입니다. 웹 애플리케이션은 자신과 다른 출처(도메인, 프로토콜 또는 포트)에 있는 리소스를 요청할 때 교차 출처 HTTP 요청을 수행하게 됩니다.

예를 들어 프런트엔드(UI)와 백엔드(Service)로 구성된 애플리케이션을 생각해 볼 수 있습니다. 프런트엔드는 https://demodomain-ui.com에서 서비스되고, 백엔드는 https://demodomain-service.com/api에서 서비스된다고 가정해 보겠습니다. 이때 최종 사용자가 애플리케이션에 접속하면, 보안상의 이유로 브라우저는 UI에서 시작된 교차 출처 HTTP 요청을 제한합니다.

이 문제를 해결하려면 CORS 표준이 필요합니다. CORS를 사용하면 서버가 자신의 자산에 누가 접근할 수 있는지뿐만 아니라 어떻게 접근할 수 있는지까지 명시적으로 지정할 수 있습니다. 교차 출처 요청은 표준 HTTP 요청 메서드를 통해 이루어지며, 대부분의 서버는 GET 요청을 허용합니다. 즉, 외부 출처(예: 웹 페이지)의 리소스가 자신의 자산을 읽는 것을 허용하는 것입니다. 반면 PATCH, PUT, DELETE 같은 HTTP 요청 메서드는 별도의 설정이 필요할 수 있습니다.

CORS 표준에서 사용되는 주요 HTTP 헤더

CORS 표준에서 추가되는 주요 HTTP 헤더는 다음과 같습니다.

  • Access-Control-Allow-Origin

  • Access-Control-Allow-Credentials

  • Access-Control-Allow-Headers

  • Access-Control-Allow-Methods

  • Access-Control-Expose-Headers

  • Access-Control-Max-Age

  • Access-Control-Request-Headers

  • Access-Control-Request-Method

  • Origin

전역(Global) 수준에서 CORS 활성화하기

먼저 NuGet 패키지 관리자에서 Microsoft.AspNet.WebApi.Cors 패키지를 설치합니다.

그다음 App_Start/WebApiConfig.cs 파일을 열고 WebApiConfig.Register 메서드에 다음 코드를 추가합니다.

C# ASP.NET Web API에서 CORS 문제 해결하는 방법 총정리

컨트롤러 및 액션(Action) 수준에서 CORS 활성화하기

전역 설정 외에도 아래와 같이 [EnableCors] 특성(Attribute)을 사용하여 컨트롤러 또는 개별 액션 메서드 수준에서 CORS를 활성화할 수 있습니다.

예제 코드

using System.Web.Http;
using System.Web.Http.Cors;
namespace DemoWebApplication.Controllers{
    [EnableCors("*", "*", "*")] // 컨트롤러 수준
    public class DemoController : ApiController{
        [EnableCors("*", "*", "*")] // 액션 수준
        public IHttpActionResult Get(int id){
            return Ok();
        }
    }
}

마찬가지로 [DisableCors] 특성을 적용하면 특정 컨트롤러나 액션에 대해 CORS를 비활성화할 수도 있습니다. 운영 환경에서는 보안을 위해 와일드카드(*) 대신 허용할 출처, 헤더, 메서드를 명시적으로 지정하는 것이 좋습니다.