ASP.NET Core Identity에서 역할 기반 인증을 위한 ApplicationRole 클래스 추가 가이드

  • 3 minutes to read

역할 기반 인증

ASP.NET Core MVC, Razor Pages, Blazor Server 프로젝트의 기본 템플릿에서는 ApplicationRole 클래스가 포함되어 있지 않습니다. 그러나 역할 기반 인증(Role-Based Authorization) 기능을 구현하려면 기본 IdentityRole 클래스를 상속받은 사용자 정의 역할 클래스가 필요합니다. 이 문서에서는 ApplicationRole을 정의하고 Identity 시스템에 통합하는 과정을 단계별로 설명합니다.


1. ApplicationRole 클래스 생성

IdentityRole을 상속하여 사용자 지정 역할 속성을 추가할 수 있습니다. 예를 들어 역할에 대한 설명을 추가하려면 다음과 같이 정의합니다:

// File: Data/ApplicationRole.cs
using Microsoft.AspNetCore.Identity;

namespace Azunt.Web.Data;

/// <summary>
/// ASP.NET Core Identity 역할 클래스 (사용자 정의 확장)
/// 역할 기반 인증 시, 역할 설명 등 추가 정보 제공
/// </summary>
public class ApplicationRole : IdentityRole
{
    public string Description { get; set; } = "";
}

2. ApplicationDbContext에 사용자 정의 역할 클래스 등록

IdentityDbContext에 제네릭 인자로 ApplicationUser, ApplicationRole, 키 타입(string)을 지정합니다:

// File: Data/ApplicationDbContext.cs
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;

namespace Azunt.Web.Data;

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, string>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
}

🔍 ApplicationUser는 사용자 정의 IdentityUser 클래스입니다. ApplicationRole과 마찬가지로 확장을 위해 사용됩니다.


3. Program.cs 또는 Startup.cs에서 Identity 설정 확장

AddIdentity 호출 시 사용자 클래스와 역할 클래스를 모두 명시해야 합니다:

builder.Services
    .AddDefaultIdentity<ApplicationUser>(
        options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();
// File: Program.cs
services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
{
    options.SignIn.RequireConfirmedAccount = false;
    options.SignIn.RequireConfirmedEmail = false;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();

4. 마이그레이션 및 데이터베이스 반영

새로운 ApplicationRole 클래스는 데이터베이스 테이블 구조에 영향을 줍니다. 따라서 마이그레이션 및 데이터베이스 업데이트를 수행해야 합니다:

dotnet ef migrations add AddApplicationRole
dotnet ef database update

5. 역할 생성 및 할당 예시

시드 데이터 또는 관리자 페이지에서 역할을 생성하고 사용자에게 할당할 수 있습니다:

var roleManager = serviceProvider.GetRequiredService<RoleManager<ApplicationRole>>();
if (!await roleManager.RoleExistsAsync("Administrators"))
{
    await roleManager.CreateAsync(new ApplicationRole
    {
        Name = "Administrators",
        Description = "관리자 역할"
    });
}

var userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var user = await userManager.FindByEmailAsync("admin@example.com");
await userManager.AddToRoleAsync(user, "Administrators");

결론

ApplicationRole 클래스는 역할에 대해 보다 유연하고 풍부한 정보를 제공할 수 있도록 돕습니다. ASP.NET Core Identity의 기본 템플릿에는 포함되어 있지 않지만, 역할 기반 인증관리자 기능 개발을 위해서는 필수적으로 정의하고 설정해야 할 요소입니다. 본 문서를 기반으로 프로젝트에 맞는 사용자 정의 역할 기능을 확장해보시기 바랍니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com