ASP.NET Core 8.0 Identity 찍먹하기
사이드 프로젝트와 회사 일을 하면서 ASP.NET Core Identity를 사용해야 할 일이 생겨, 관련 내용을 정리하며 공부해보았습니다. 그 내용을 공유합니다.
개요
- 해당 글은 ASP.NET Core에서 지원하는 멤버십 기능인 Identity에 대해 설명합니다.
- 해당 글은 ASP.NET Core 8.0 버전을 대상으로 합니다.
- 해당 글에서 얻을 수 있는 내용은 아래와 같습니다.
- ASP.NET Core Identity가 무엇인지
- ASP.NET Core Identity를 사용하여 구현할 수 있는 것
- ASP.NET Core Identity를 사용해야할 상황과 그렇지 않은 상황을 구분하는 방법
- 프로젝트 내 본격적인 사용 방법은 다음 포스트에 작성 예정입니다. (이번 글은 찍먹)
ASP.NET Core Identity가 무엇인가?
ASP.NET Core Identity is the membership system for building ASP.NET Core web applications, including membership, login, and user data. ASP.NET Core Identity allows you to add login features to your application and makes it easy to customize data about the logged in user. You can find additional information in the ASP.NET Core Documentation.
ASP.NET Core Identity(이하 Identity)는 ASP.NET Core 웹 애플리케이션에서 멤버십 기능, 로그인 기능, 사용자 데이터 관리 기능 등을 포함하는 멤버십 시스템을 제공하는 패키지입니다.
즉, Identity 패키지 내부에 회원가입/로그인/로그아웃 및 인증/인가, 보안 등에 대한 모든 기능 구현되어 있어서 일부 설정후, 바로 해당 기능을 구현할 수 있는 패키지입니다.
기본적으로 Entity Framework Core(이하 EF Core)와 함께 사용되며, Program.cs 내 설정 후, EF Core로 마이그레이션 및 업데이트 시, 필요한 테이블을 자동생성합니다. 저는 SQL Server과 함께 사용하여 테스트하고 적용해봤습니다.
Razor Page(MVC 포함), API 전부 적용 가능합니다.
Razor 페이지의 경우는 VS2022에서 'ASP.NET Core WebApp' 템플릿으로 생성할 때, 인증 유형을 '개별 사용자 계정'으로 설정한다면, UI까지 기본적으로 제공된 템플릿을 실행시켜볼 수 있습니다.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddRazorPages();
API 또한 아래와 같이 서비스를 등록해주시면 API 엔드포인트가 자동으로 생성됩니다.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddIdentityApiEndpoints<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
그러나, Identity는 쉽게 바로 적용할 수 있는 만큼 기본 Identity 틀에서 벗어나는 작은 요구사항이 추가될수록 적용 난이도가 매우 급격히 올라가는 것 같습니다.
공식문서에는 Identity를 구현된 그대로 사용하기 위한 방법에 대해 문서화가 상세히 되어있는 반면, 예외적인 상황에 대한 적용 방법에 대해서는 문서화가 미흡하다고 느껴졌습니다.
이번 포스팅에서는 간략하게 Identity의 개념에 대해 초점을 맞추고 다음 포스팅에서 실제 사용 방법과 예외상황을 중점적으로 포스팅해볼 예정입니다.
ASP.NET Core Identity로 구현할 수 있는 것
Identity는 최신 웹에서 사용하는 대부분의 멤버십 기능이 구현되어 있습니다.
- 기본적인 인증/인가
- 사용자 데이터 CRUD
- 비밀번호 관리
- 비밀번호 암호화
- 비밀번호 유효성 검사 설정
- 계정 lock 관련 기능
- 권한 부여
- 역할 기반 권한 부여
- 클레임 기반 권한 부여
- 토큰 처리(JWT, Refresh Token)
- 이메일 확인 후 패스워드 재설정
ASP.NET Core의 계정 확인 및 암호 복구 | Microsoft Learn - Google, Facebook, Twitter 등의 외부 인증 공급자 사용
ASP.NET Core에서 Facebook 및 Google 인증 | Microsoft Learn - 2단계 인증(Two Factor Authentication, 2FA)
ASP.NET Core의 다단계 인증 | Microsoft Learn - Duende Identity Server와 연동하여 보안 기능 강화
Home :: Duende IdentityServer Documentation (duendesoftware.com)
등등 여러 기능을 지원하고 있습니다.
EF Core로 마이그레이션하여 update-database 시 생성되는 테이블은 다음과 같습니다.
각 테이블의 역할과 동작 방식은 추후 글에서 깊게 알아보도록 하겠습니다.
ASP.NET Core Identity를 사용해야할 상황과 그렇지 않은 상황을 구분하는 방법
일반적으로 멤버십이 필요한 경우, ASP.NET Core에서는 기본적으로 대부분의 시나리오에서 멤버십 기능 구현에 Identity 사용을 권장합니다.
그러나 ID 솔루션 선택에 있어서 Identity가 유일한 선택지는 아닙니다.
아래와 같이 다른 대체 솔루션도 존재합니다. 굳이 Identity를 우선시 할 필요는 없습니다.
이름 | 형식 | 라이센스 유형 | 문서 링크 |
ASP.NET Core Identity | Self host | OSS (MIT) | Secure a web app with ASP.NET Core Identity |
Auth0 | Managed | Commercial | Get started |
Duende IdentityServer | Self host | Commercial | ASP.NET Identity integration |
Keycloak | Container | OSS (Apache 2.0) | Keycloak client adapters documentation |
Microsoft Entra ID | Managed | Commercial | Entra documentation |
Okta | Managed | Commercial | Okta for ASP.NET Core |
OpenIddict | Self host | OSS (Apache 2.0) | OpenIddict Documentation |
OIDC 서버 고려
ASP.NET Core Identity 적용을 도입하기에 앞서, Identity 대신 OIDC(Open ID Connect) 서버가 필요한 경우도 있습니다.
OIDC 서버가 필요한 경우는 공개된 API 서버에서 멤버십 서비스를 구현할 때, JWT 토큰을 발행하는 방식(Identity는 JWT, Refresh Token을 사용하여 인증/인가 처리를 합니다.) 을 채택하는 경우입니다. 이때, 토큰을 발급하고 토큰에 대한 유효성 검사를 제공하는 서비스가 필요합니다.
그러한 역할을 하는 서버가 바로 OIDC 서버입니다.
아래 이미지는 공식 문서에서 제공하는 Identity와 OIDC 서버 구성 선택을 위한 다이어그램입니다.
다음 글에서 실질적인 사용 방법에 대해 알아보도록 하겠습니다!
참고자료
aspnetcore/src/Identity at main · dotnet/aspnetcore
ASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux. - dotnet/aspnetcore
github.com
ASP.NET Core에서 Identity 소개
ASP.NET Core 앱과 함께 Identity를 사용합니다. 암호 요구 사항(RequireDigit, RequiredLength, RequiredUniqueChars 등)을 설정하는 방법을 알아봅니다.
learn.microsoft.com
ASP.NET Core Identity Tutorials
In this ASP.NET Core Identity Tutorials For Beginners and Professionals series, I will cover all the features of ASP.NET Core Identity.
dotnettutorials.net
ASP.NET Core Identity to create Authorization and Authentication features
ASP.NET Core Identity is a .NET API through which we can make login functionality in our App. Besides this Identity helps to manage users, passwords, roles, policies, tokens, claims, profiles, authorization and authentication. Database ASP.NET Core Identit
www.yogihosting.com