ASP.NET Core Identity에서 역할 기반 인증을 위한 ApplicationRole
클래스 추가 가이드
역할 기반 인증
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의 기본 템플릿에는 포함되어 있지 않지만, 역할 기반 인증 및 관리자 기능 개발을 위해서는 필수적으로 정의하고 설정해야 할 요소입니다. 본 문서를 기반으로 프로젝트에 맞는 사용자 정의 역할 기능을 확장해보시기 바랍니다.