0Pricing
C# Academy · 강의

역할 기반 권한 부여

사용자 역할에 따라 엔드포인트 접근을 제한합니다.

역할 기반 권한 부여은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 역할 기반 권한 부여
  2. 클레임 기반 권한 부여
  3. 정책 기반 권한 부여
  4. 사용자 지정 권한 부여 요구 사항
← C# Academy(으)로 돌아가기