권한부여: 역할 기반 권한부여
- 본 번역문서의 원문은 Role based Authorization docs.microsoft.com 입니다.
- 본 번역문서는 ASP.NET Core 보안 : 역할 기반 권한부여 www.taeyo.net 에서도 함께 제공됩니다.
신원(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
역할을 부여받은 사용자에게 권한을 부여합니다.
- 권한부여: 개요 2017-01-14 08:00
- 권한부여: 간단한 권한부여 2017-01-14 11:00
- 권한부여: 역할 기반 권한부여 2017-01-14 14:00
- 권한부여: 클레임 기반 권한부여 2017-01-15 08:00
- 권한부여: 사용자 지정 정책 기반 권한부여 2017-01-15 11:00
- 권한부여: 요구사항 처리기와 의존성 주입 2017-01-15 14:00
- 권한부여: 리소스 기반 권한부여 2017-01-16 08:00
- 권한부여: 뷰 기반 권한부여 2017-01-16 11:00
- 권한부여: 스키마별 신원 제한 2017-01-16 14:00
- 인증: ASP.NET Core Identity 살펴보기 2017-01-30 08:00
- 인증: Facebook, Google 및 기타 외부 공급자를 이용한 인증 활성화시키기 2017-02-13 08:00
- 인증: Facebook 인증 구성하기 2017-02-13 11:00
- 인증: Twitter 인증 구성하기 2017-02-20 08:00
- 인증: Google 인증 구성하기 2017-02-20 11:00
- 인증: Microsoft 계정 인증 구성하기 2017-02-20 14:00
- 인증: 계정 확인 및 비밀번호 복구 2017-03-06 08:00
- 인증: SMS를 이용한 2단계 인증 2017-03-13 08:00
- 인증: ASP.NET Core Identity 없이 Cookie 미들웨어 사용하기 2017-03-20 08:00
- 데이터 보호: 데이터 보호 개요 2017-03-27 08:00
- 데이터 보호: 데이터 보호 API 시작하기 2017-03-29 08:00
- 데이터 보호: 소비자 APIs 개요 2017-03-31 08:00
- 데이터 보호: 용도 문자열 2017-04-03 08:00
- 데이터 보호: ASP.NET Core의 용도 계층 구조 및 다중-테넌트(Multi-Tenancy) 2017-04-05 08:00
- 데이터 보호: 비밀번호 해싱 2017-04-07 08:00
- 데이터 보호: 보호된 페이로드의 수명 제한하기 2017-04-10 08:00
- 테이터 보호: 키가 취소된 페이로드의 보호 해제하기 2017-04-12 08:00
- 데이터 보호: 데이터 보호 구성하기 2017-04-14 08:00
- 데이터 보호: 키 관리 및 수명 기본 설정 2017-04-17 08:00
- 데이터 보호: 머신 수준 정책 2017-04-19 08:00
- 데이터 보호: 비-DI 인식 시나리오 2017-04-21 08:00
- 호환성: 응용 프로그램 간 인증 쿠키 공유하기 2017-05-12 08:00
- 호환성: ASP.NET의 <machineKey> 요소 대체하기 2017-05-16 08:00
- 교차 원본 요청 활성화시키기 (CORS) 2017-05-17 08:00
- ASP.NET Core 응용 프로그램에 SSL 적용하기 2017-05-18 08:00
- 개발 중 민감한 응용 프로그램 정보 안전하게 저장하기 2017-05-19 08:00