역할 기반 권한 부여
사용자 역할에 따라 엔드포인트 접근을 제한합니다.
역할 기반 권한 부여은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
인증과 인가
인증은 "누구십니까?"에 답합니다. 인가는 "무엇을 할 수 있습니까?"에 답합니다.
ASP.NET Core에서 가장 단순한 인가 모델은 역할 기반입니다. 사용자는 역할에 속하고, 엔드포인트는 특정 역할을 요구합니다.
// User has roles: admin, editor
// Endpoint requires: admin역할은 어디에서 오는가
역할은 ClaimTypes.Role 형식의 클레임일 뿐입니다. JWT를 발급할 때 사용자가 가진 각 역할에 대해 역할 클레임을 하나씩 추가합니다.
var claims = new List<Claim>
{
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim(ClaimTypes.Role, "admin"),
new Claim(ClaimTypes.Role, "editor")
};역할 Claim 형식
[Authorize(Roles=...)]와 User.IsInRole이 작동하려면 handler가 어떤 클레임 형식이 역할을 나타내는지 알아야 합니다.
JWT key role은 기본적으로 ClaimTypes.Role에 매핑됩니다. 사용자 지정 key를 사용한다면 RoleClaimType을 통해 검증기에게 알려 주십시오.
options.TokenValidationParameters = new TokenValidationParameters
{
RoleClaimType = ClaimTypes.Role
};단일 역할 요구
컨트롤러나 작업 메서드에 [Authorize(Roles = "admin")]을 적용합니다. admin 역할을 가진 사용자만 들어올 수 있습니다.
[Authorize(Roles = "admin")]
[HttpDelete("users/{id}")]
public IActionResult DeleteUser(int id)
{
// only admins reach here
return NoContent();
}여러 역할 중 하나 요구
쉼표로 구분된 목록은 OR을 의미합니다. 사용자는 나열된 역할 중 하나 이상을 가져야 합니다.
[Authorize(Roles = "admin,editor")]
[HttpPut("articles/{id}")]
public IActionResult Update(int id) => Ok();
// admins OR editors are allowed여러 역할 요구 (AND)
여러 역할을 모두 요구하려면 여러 [Authorize] 특성을 겹쳐 적용합니다. 각각의 특성이 통과되어야 합니다.
[Authorize(Roles = "employee")]
[Authorize(Roles = "manager")]
public IActionResult ApproveBudget() => Ok();
// must be BOTH employee AND manager코드에서 역할 확인
때로는 입구에서 확인하는 것뿐 아니라 메서드 본문 안에서도 역할을 확인해야 합니다. User.IsInRole을 사용하십시오.
public IActionResult GetReport()
{
var data = BuildReport();
if (User.IsInRole("admin"))
data.IncludeSensitiveColumns();
return Ok(data);
}최소 API의 동등한 방법
최소 API에서는 인라인 정책과 함께 .RequireAuthorization을 사용하거나, 더 간단하게 이름이 지정된 정책을 통해 역할을 요구할 수 있습니다.
app.MapDelete("/users/{id}", (int id) => Results.NoContent())
.RequireAuthorization(p => p.RequireRole("admin"));계층 구조의 역할
ASP.NET Core에는 기본 제공 역할 계층 구조가 없습니다. 관리자가 암묵적으로 편집자 권한도 가져야 한다면 로그인할 때 두 역할 클레임을 모두 부여하거나 정책으로 모델링하십시오(다음 과정).
// Grant both at login if admin >= editor
new Claim(ClaimTypes.Role, "admin");
new Claim(ClaimTypes.Role, "editor");역할만으로 부족할 때
역할은 포괄적인 단위입니다. 규칙이 데이터(예: "소유자만 편집할 수 있음") 또는 세분화된 권한에 따라 달라지면 역할 확인이 복잡해집니다.
이럴 때 클레임 기반 및 정책 기반 권한 부여를 사용합니다.
// Hard to express with roles alone:
// "editors, but only for their own department"403과 401 반환
사용자가 인증되지 않은 경우 역할 확인 결과는 401 Unauthorized가 됩니다. 인증되었지만 해당 역할이 없으면 403 Forbidden을 받습니다.
// No/invalid token -> 401 Unauthorized
// Valid token, wrong role -> 403 Forbidden빠른 확인
역할에 대한 지식을 확인해 보십시오.
요약
역할 기반 권한 부여를 배웠습니다.
- 역할은 토큰에 포함되는
ClaimTypes.Role클레임입니다. [Authorize(Roles = "a,b")]는 OR을 의미하고, 특성을 여러 개 쌓으면 AND를 의미합니다.User.IsInRole은 코드에서 역할을 확인합니다.- 역할은 포괄적인 단위이므로 데이터 기반 규칙에는 더 풍부한 모델이 필요합니다.
다음 주제: 클레임 기반 권한 부여
자주 묻는 질문
“역할 기반 권한 부여” 강의는 무료인가요?
네 — “역할 기반 권한 부여” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“역할 기반 권한 부여”에서 뭘 배우나요?
사용자 역할에 따라 엔드포인트 접근을 제한합니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C# Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“역할 기반 권한 부여” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 역할 기반 권한 부여
- 클레임 기반 권한 부여
- 정책 기반 권한 부여
- 사용자 지정 권한 부여 요구 사항