IdentityUser 기반 ApplicationUser 인증 구현
목차
- 프로젝트 생성
- ApplicationUser 클래스 작성
- Identity 스캐폴딩으로 인증 페이지 추가
- ApplicationDbContext에서 ApplicationUser 적용
- 인증 기능 단계별 확인: 회원가입, 로그인, 사용자 정보 표시, 로그아웃
- 프로젝트 실행 및 테스트
- 마무리
IdentityUser 기반 ApplicationUser 인증 구현
ASP.NET Core 프로젝트에서 인증 기능을 구현할 때, 기본적으로 제공되는 IdentityUser
를 사용하는 것만으로도 충분하지만, 프로젝트가 커지고 사용자 정보를 확장해야 할 필요가 생길 때에는 이를 상속하는 ApplicationUser
클래스를 활용하는 것이 효과적입니다. 이 가이드는 ApplicationUser
를 사용하여 Azunt.Web 프로젝트에서 ASP.NET Core Identity 기능을 완성하는 방법을 단계별로 자세히 설명드립니다.
1. 프로젝트 생성
먼저 Visual Studio를 사용하여 새로운 ASP.NET Core 8.0 Razor Pages 프로젝트를 생성하시겠습니다.
새 프로젝트 만들기 단계
- Visual Studio에서 "새 프로젝트 만들기"를 선택합니다.
- 프로젝트 템플릿으로 "ASP.NET Core Web App" (Razor Pages)을 선택하시고 "다음"을 클릭합니다.
- 프로젝트 이름을 Azunt.Web 으로 지정하신 후 "다음"을 클릭합니다.
- 대상 프레임워크는 반드시 .NET 8.0 (Long-term support) 로 선택하시는 것을 권장드립니다.
- "인증 유형 선택" 단계에서는 Individual Accounts (개별 사용자 계정) 을 선택하시고,
"Store user accounts in-app (사용자 계정을 앱 내에 저장)" 옵션을 선택합니다. - HTTPS를 활성화하고, Razor runtime compilation도 함께 활성화하시면 개발 시 실시간으로 변경사항을 확인하실 수 있습니다.
- "만들기" 버튼을 클릭하여 프로젝트를 생성합니다.
이렇게 하시면 Azunt.Web 프로젝트가 성공적으로 생성됩니다.
현재 상태에서는 아직 Identity 관련 Razor Pages 파일이 생성되어 있지 않으며, 이후 스캐폴딩 과정을 통해 추가하게 됩니다.
2. ApplicationUser 클래스 작성
이제 기본 IdentityUser
를 확장하는 ApplicationUser
클래스를 작성하겠습니다.
Data 폴더 확인
먼저, 프로젝트 루트에 위치한 Data
폴더를 확인합니다.
ApplicationUser 클래스 파일 추가
Data
폴더 안에 새 클래스 파일을 추가하시고, 이름을 ApplicationUser.cs
로 지정합니다.
다음 코드를 그대로 작성해 주시기 바랍니다.
using Microsoft.AspNetCore.Identity;
namespace Azunt.Web.Data
{
public class ApplicationUser : IdentityUser
{
}
}
여기에서는 별도의 속성을 추가하지 않고, 기본 형태로 작성합니다.
추후 사용자별 추가 정보를 저장하고자 하실 때 이 클래스를 확장하여 사용하실 수 있습니다.
3. Identity 스캐폴딩으로 인증 페이지 추가
다음으로 ASP.NET Core Identity Razor Pages 를 스캐폴딩하여 프로젝트에 포함시키겠습니다.
Identity 스캐폴딩 방법
- 솔루션 탐색기에서 Azunt.Web 프로젝트를 마우스 오른쪽 버튼으로 클릭하시고,
"Add (추가)" > "New Scaffolded Item (새 스캐폴드 항목)"을 선택합니다. - "Identity" 를 선택하시고 "Add (추가)" 버튼을 클릭합니다.
- "Identity Scaffolder" 창이 나타나면 다음과 같이 설정해 주세요.
- Data context class:
Azunt.Web.Data.ApplicationDbContext
- User class:
Azunt.Web.Data.ApplicationUser
- "Override all files (모든 파일 덮어쓰기)" 옵션을 선택하여 Login, Logout, Register, Manage 등 모든 페이지를 포함하도록 합니다.
- Data context class:
- 폴더 위치는 기본값을 그대로 사용하시고, "Add (추가)" 버튼을 클릭합니다.
스캐폴딩이 완료되면 /Areas/Identity/Pages/
폴더가 생성되고, 로그인, 회원가입, 비밀번호 재설정, 사용자 관리 등 인증 관련 모든 Razor Pages가 프로젝트에 포함됩니다.
4. ApplicationDbContext에서 ApplicationUser 적용
이제 ApplicationUser
를 Identity 시스템에 적용하여 사용자 계정 관리가 확장된 사용자 모델을 기준으로 동작하도록 설정하겠습니다.
1) ApplicationDbContext 수정
Data/ApplicationDbContext.cs
파일을 열어 다음과 같이 작성해 주세요.
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
namespace Azunt.Web.Data
{
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
}
IdentityDbContext<ApplicationUser>
를 사용하여 ASP.NET Core Identity 시스템이 기본 IdentityUser
대신 ApplicationUser
클래스를 사용하도록 구성합니다.
2) Program.cs 수정
프로젝트의 시작점인 Program.cs
파일에서도 반드시 ApplicationUser
를 사용하도록 변경해 주셔야 합니다.
기존 코드 (수정 전):
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
변경 후 코드 (수정 후):
builder.Services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
이렇게 수정함으로써, Identity 가 ApplicationUser
타입을 기준으로 사용자 계정을 관리하게 됩니다.
3) GlobalUsings.cs 등록 (선택 사항이지만 권장)
ApplicationUser
클래스가 여러 파일에서 사용될 예정이므로, 전역 using 지시문을 추가하여 편의성을 높입니다.
파일 경로:
Azunt.Web\GlobalUsings.cs
다음 코드를 추가합니다.
global using Azunt.Web.Data;
이렇게 하면 프로젝트 전체에서 ApplicationUser
를 사용할 때마다 별도로 using 문을 작성하지 않아도 됩니다.
4) Identity 영역 내 소스 코드 일괄 변경
Azunt.Web\Areas\Identity\Pages\Account\
폴더의 모든 소스 코드 파일을 열어보시면, 기본적으로 IdentityUser
로 되어 있습니다.
이를 모두 ApplicationUser
로 변경합니다.
예를 들어, 기존 코드:
private readonly UserManager<IdentityUser> _userManager;
변경 후:
private readonly UserManager<ApplicationUser> _userManager;
SignInManager
, UserManager
사용 시 제네릭 인자, 모델 클래스 등에서 사용되는 모든 IdentityUser
를 ApplicationUser
로 변경해 주시기 바랍니다.
참고:
Areas/Identity/Pages/Account/Manage/
폴더 안의 코드들도 모두 동일하게 적용합니다.
이제 위 과정까지 완료하시면, 프로젝트는 전체적으로 ApplicationUser
를 기준으로 사용자 인증 및 관리를 수행할 수 있도록 완전히 준비된 상태가 됩니다.
5. 인증 기능 단계별 확인
회원가입
회원가입 기능은 스캐폴딩 과정에서 자동으로 생성된 /Areas/Identity/Pages/Account/Register.cshtml
페이지를 통해 제공됩니다.
프로젝트를 실행한 뒤 브라우저 주소창에 다음과 같이 입력하여 회원가입 페이지로 이동합니다.
https://localhost:{포트 번호}/Identity/Account/Register
이메일과 비밀번호를 입력하고 회원가입을 진행하시면 됩니다.
특별히 추가적인 수정 없이도 ApplicationUser
를 기반으로 계정이 생성됩니다.
로그인
회원가입 직후에는 자동으로 로그인 처리가 됩니다.
로그아웃 후 로그인 페이지를 테스트하시려면 아래 주소로 이동합니다.
https://localhost:{포트 번호}/Identity/Account/Login
정상적으로 로그인이 완료되면 기본 레이아웃에 따라 사용자 인터페이스가 변화합니다.
사용자 정보 표시
사이트 공통 레이아웃 파일인 /Pages/Shared/_Layout.cshtml
파일을 열어주세요.
여기에는 로그인 여부에 따라 다른 메뉴가 표시됩니다.
@if (User.Identity?.IsAuthenticated ?? false)
{
<form method="post" asp-area="Identity" asp-page="/Account/Logout" id="logoutForm" class="form-inline">
<button type="submit" class="nav-link btn btn-link text-dark">Logout</button>
</form>
}
else
{
<a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Register">Register</a>
<a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a>
}
로그인 상태에서는 로그아웃 버튼이, 비로그인 상태에서는 회원가입 및 로그인 링크가 나타납니다.
사용자 이름을 표시하시려면 위 코드에 다음과 같이 추가하시면 됩니다.
@if (User.Identity?.IsAuthenticated ?? false)
{
<span>Hello, @User.Identity?.Name!</span>
}
로그아웃
스캐폴딩 시 자동으로 구현된 로그아웃 기능을 사용합니다.
레이아웃 파일에 포함된 로그아웃 버튼을 클릭하시면 로그아웃이 정상적으로 처리됩니다.
6. 프로젝트 실행 및 테스트
프로젝트를 실행하여 지금까지 구현한 기능들을 하나씩 확인하시기 바랍니다.
- Visual Studio 에서 "빌드 (Ctrl + Shift + B)" 를 수행합니다.
- "디버그 시작 (F5)" 버튼을 클릭합니다.
- 브라우저를 열고 다음 경로들을 순서대로 테스트합니다.
- 회원가입:
/Identity/Account/Register
- 로그인:
/Identity/Account/Login
- 로그인한 사용자 이름 표시 확인
- 로그아웃 및 다시 로그인
- 회원가입:
회원가입, 로그인, 사용자 정보 표시, 로그아웃이 모두 정상적으로 동작하는지 꼼꼼히 확인합니다.
7. 마무리
지금까지 Azunt.Web 프로젝트에서 ApplicationUser
를 사용하여 ASP.NET Core Identity 기반 인증 기능을 구현하는 전 과정을 자세히 따라오셨습니다.
스캐폴딩을 통해 Identity 관련 Razor Pages 를 모두 추가하고, 회원가입, 로그인, 사용자 정보 표시, 로그아웃까지 핵심적인 인증 기능을 프로젝트에 완성하였습니다.
특별히 ApplicationUser
를 활용하여 추후 사용자 프로필 확장이나 추가 기능 개발이 유연하도록 기반을 마련해 두었기 때문에, 향후 관리 기능, 이메일 인증, 역할 기반 권한 관리 등으로 발전시키시기에도 좋은 출발점이 될 것입니다.
이제 프로젝트가 기본 인증 체계를 갖추었으므로, 더 발전된 기능을 추가하시거나 사용자 편의성을 향상시키는 개발을 이어가실 수 있습니다.