login register Sysop! about ME  
qrcode
    최초 작성일 :    2017년 01월 20일
  최종 수정일 :    2017년 01월 20일
  작성자 :    soggun
  편집자 :    soggun (송원석)
  읽음수 :    9,655

강좌 목록으로 돌아가기

필자의 잡담~

이번 컬럼은 ASP.NET Core 보안 강좌의 3번째 글, 역할 기반 권한부여에 대한 글입니다.

모든 컬럼은 http://docs.asp.net의 내용을 참고하여 번역한 것입니다. Windows 뿐만 아니라 Linxu, OS X에서도 동작하는 완전한 크로스 플랫폼 서버기술인 ASP.NET Core! 기대해 주세요.

본 번역문서는 개인적인 취지로 번역되어 제공되는 문서로, 원문을 비롯한 모든 저작권은 마이크로소프트사에 있습니다. 마이크로소프트사의 요청이 있을 경우, 언제라도 게시가 중단될 수 있습니다. 본 번역문서에는 오역이 포함되어 있을 수 있으며 주석도 번역자 개인의 견해일뿐입니다. 마이크로소프트사는 본 문서의 번역된 내용에 대해 일체의 보장을 하지 않습니다. 번역이 완료된 뒤에도 제품이 업그레이드 되거나 기능이 변경됨에 따라 원문도 변경되거나 보완되었을 수 있으므로 참고하시기 바랍니다.

원문: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/roles

역할 기반 권한부여

액션과 액션 결과는 개발자가 ASP.NET Core MVC로 응용 프로그램을 구축할 때 가장 근간이 되는 부분입니다.

신원(Identity)을 생성할 때 해당 신원에 하나 이상의 역할을 부여할 수 있습니다. 가령, Tracy에게는 Administrator 역할과 User 역할을 동시에 부여하고 Scott에게는 User 역할만 부여할 수 있습니다. 이런 역할들이 생성되고 관리되는 방식은 권한부여 절차에 사용되는 백업 저장소에 따라 달라집니다. 개발자는 ClaimsPrincipal 클래스의 IsInRole 속성을 이용해서 역할에 접근할 수 있습니다.

역할 검사 추가하기

역할 기반의 권한 검사는 선언적인 방식으로 구성됩니다. 개발자는 요청된 리소스에 사용자가 접근하기 위해서 필요한 역할을 컨트롤러나 컨트롤러 액션 코드에 지정하는 방식으로 역할 기반 권한 검사를 구현합니다.

가령, 다음 코드는 Administrator 그룹에 포함된 사용자만 AdministrationController의 모든 액션에 접근할 수 있게 제한합니다:

[Authorize(Roles = "Administrator")]
public class AdministrationController : Controller
{
}

다음과 같이 쉼표(,)로 연결된 목록을 전달해서 다수의 역할을 지정할 수도 있습니다:

[Authorize(Roles = "HRManager,Finance")]
public class SalaryController : Controller
{
}

이 컨트롤러는 HRManager 역할이나 Finance 역할을 부여 받은 사용자만 접근할 수 있습니다.

동시에 여러 개의 어트리뷰트를 적용하면 지정된 역할들을 모두 부여 받은 사용자만 리소스에 접근할 수 있습니다. 예를 들어, 다음 예제는 PowerUser 역할과 ControlPanelUser 역할을 모두 부여 받은 사용자만 컨트롤러에 접근할 수 있도록 제한합니다:

[Authorize(Roles = "PowerUser")]
[Authorize(Roles = "ControlPanelUser")]
public class ControlPanelController : Controller
{
}

역할 권한부여 어트리뷰트를 액션 수준에 추가로 적용해서 접근을 더욱 제한할 수도 있습니다:

[Authorize(Roles = "Administrator, PowerUser")]
public class ControlPanelController : Controller
{
    public ActionResult SetTime()
    {
    }

    [Authorize(Roles = "Administrator")]
    public ActionResult ShutDown()
    {
    }
}

이 예제 코드에서 Administrator 역할이나 PowerUser 역할을 부여 받은 사용자는 컨트롤러와 SetTime 액션에 접근할 수 있습니다. 그러나 ShutDown 액션은 Administrator 역할을 부여 받은 사용자만 접근이 가능합니다.

또는 컨트롤러 자체는 잠그고, 개별 액션만 인증되지 않은 익명 사용자에게 접근을 허용할 수도 있습니다:

[Authorize]
public class ControlPanelController : Controller
{
    public ActionResult SetTime()
    {
    }

    [AllowAnonymous]
    public ActionResult Login()
    {
    }
}

정책 기반의 역할 검사

응용 프로그램 구동시 Authorization 서비스 구성의 일부로 개발자가 등록한 정책을 사용하는 새로운 Policy 구문을 활용해서 역할 요구사항을 표현할 수도 있습니다. 일반적으로 이 작업은 Startup.cs 파일의 ConfigureServices() 메서드에서 수행됩니다:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddAuthorization(options =>
    {
        options.AddPolicy("RequireAdministratorRole", policy => policy.RequireRole("Administrator"));
    });
}

이렇게 등록된 정책은 Authorize 어트리뷰트의 Policy 속성을 통해서 적용됩니다:

[Authorize(Policy = "RequireAdministratorRole")]
public IActionResult Shutdown()
{
    return View();
}

단일 요구사항에 다수의 허용되는 역할을 지정하고 싶다면, 해당 역할들을 RequireRole 메서드에 매개변수로 전달하면 됩니다:

options.AddPolicy("ElevatedRights", policy =>
          policy.RequireRole("Administrator""PowerUser""BackupAdministrator"));

이 예제 코드는 Administrator 역할, PowerUser 역할, BackupAdministrator 역할을 부여받은 사용자에게 권한을 부여합니다.


authored by


 
 
.NET과 Java 동영상 기반의 교육사이트

로딩 중입니다...

서버 프레임워크 지원 : NeoDEEX
based on ASP.NET 3.5
Creative Commons License
{5}
{2} 읽음   :{3} ({4})