권한부여: 간단한 권한부여

등록일시: 2017-01-14 11:00,  수정일시: 2017-01-20 11:11
조회수: 4,526
이 문서는 ASP.NET Core 기술을 널리 알리고자 하는 개인적인 취지로 제공되는 번역문서입니다. 이 문서에 대한 모든 저작권은 마이크로소프트에 있으며 요청이 있을 경우 언제라도 게시가 중단될 수 있습니다. 번역 내용에 오역이 존재할 수 있고 주석은 번역자 개인의 의견일 뿐이며 마이크로소프트는 이에 관한 어떠한 보장도 하지 않습니다. 번역이 완료된 이후에도 대상 제품 및 기술이 개선되거나 변경됨에 따라 원문의 내용도 변경되거나 보완되었을 수 있으므로 주의하시기 바랍니다.
본문에서는 Authorize 어트리뷰트를 이용한 가장 간단한 형태의 권한부여 방식을 살펴봅니다.

MVC에서 권한부여는 Authorize 어트리뷰트와 이 어트리뷰트가 제공해주는 다양한 매개변수들을 통해서 제어됩니다. 컨트롤러나 액션에 Authorize 어트리뷰트를 적용하면 인증된 사용자만 해당 컨트롤러와 액션에 접근할 수 있게 됩니다.

가령, 다음 코드는 인증된 사용자만 AccountController에 접근할 수 있도록 제한합니다:

[Authorize]
public class AccountController : Controller
{
    public ActionResult Login()
    {
    }

    public ActionResult Logout()
    {
    }
}

만약 컨트롤러 전체가 아닌 특정 액션에만 권한부여를 설정하고 싶다면 해당 액션에만 Authorize 어트리뷰트를 적용하면 됩니다:

public class AccountController : Controller
{
    public ActionResult Login()
    {
    }

    [Authorize]
    public ActionResult Logout()
    {
    }
}

이렇게 하면 인증된 사용자만 로그아웃 기능에 접근할 수 있습니다.

또는 AllowAnonymous 어트리뷰트를 사용해서 인증되지 않은 사용자도 개별 액션에 접근할 수 있도록 허용할 수도 있습니다. 이를테면:

[Authorize]
public class AccountController : Controller
{
    [AllowAnonymous]
    public ActionResult Login()
    {
    }

    public ActionResult Logout()
    {
    }
}

이런 방식으로 어트리뷰트를 적용할 경우, 기본적으로는 인증된 사용자만 AccountController에 접근할 수 있지만, 인증된 사용자인지 또는 인증되지 않은 사용자인지 여부에 관계없이, 즉 익명 상태와 무관하게 모든 사용자가 접근할 수 있도록 설정된 Login 액션은 예외로 간주됩니다.

경고

[AllowAnonymous] 어트리뷰트는 모든 권한부여 관련 구문을 우회하여 무시해버립니다. 그러므로 [AllowAnonymous] 어트리뷰트와 [Authorize] 어트리뷰트를 동시에 적용하면 결과적으로 [Authorize] 어트리뷰트는 항상 무시됩니다. 예를 들어, 특정 컨트롤러에 [AllowAnonymous] 어트리뷰트를 적용한 상태에서, 해당 컨트롤러나 컨트롤러 액션에 [Authorize] 어트리뷰트를 적용하면 [Authorize] 어트리뷰트는 모두 무시됩니다.