ASP.NET Core Identity
ASP.NET Core Identity의 클레임(Claim) 이해하기
ASP.NET Core Identity에서 "클레임(Claim)"은 사용자의 신원 정보나 권한과 같은 속성을 나타내는 중요한 구성 요소입니다. 기본적으로, 클레임은 사용자에 관한 정보나 권한을 나타내는 키와 값의 쌍으로 이루어져 있습니다. 이러한 클레임은 사용자의 인증 정보와 권한을 관리하는 데 필수적입니다.
영어로 'Claim'은 "주장" 또는 "청구"라는 의미를 가지나, 보안 및 인증 컨텍스트에서는 위와 같이 사용자의 신원 정보를 의미하는 특별한 용어로 쓰입니다.
ASP.NET Core Security Features
- Authentication
- Authorization
- Data protection
- HTTPS enforcement
- App secrets
- Anti-request forgery protection
- CORS management
ASP.NET Core Identity
- 로그인
await _signInManager.PasswordSignInAsync(E, P, R, lockoutOnFailure: true);
- 로그인 확인:
SignInManager.IsSignedIn(User)
@if (SignInManager.IsSignedIn(User))
- 로그인 이름:
User.Identity.Name
@User.Identity.Name
- 로그아웃:
await _signInManager.SignOutAsync();
회원 가입, 로그인, 로그아웃, 회원 정보 표시
- 회원 가입
_userManager.CreateAsync(user, Input.Password);
- 로그인
_signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
- 로그아웃
HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);
- 회원 정보
User.Identity.Name
회원가입 코드 조각
ASP.NET Core Identity 회원 가입
var user = new IdentityUser { UserName = model.Email, Email = model.Email };
var result = await _userManager-CreateAsync(user, model.Password);
if (result.Succeeded)
{
}
회원정보 읽어오기
UserManager.FindByNameAsync()
메서드
User.IsInRole()
메서드로 로그인 및 역할 체크
로그인한 사용자가 “Administrators”와 같은 그룹(역할)에 포함된 사용자라면 “대시보드” 링크를 표시하는 내용은 다음 코드 조각을 사용할 수 있습니다.
@if (SignInManager.IsSignedIn(User))
{
// 로그인한 후 최고관리자(Administrators) 그룹 사용자라면
if (User.IsInRole("Administrators"))
{
<li class="nav-item">
<a class="nav-link" href="/Dashboards" title="Dashboard">Dashboard</a>
</li>
}
}
ASP.NET Core Identity Structure
- Stores
- IUserStore
- IRoleStore
- Managers
- UserManager
- RoleManager
- Extensions
- SignInManager
- SecurityStamp
- Validator
- Entity
- User
- Role
ASP.NET Identity 패키지
- Microsoft.Extensions.Identity.Core
- Microsoft.AspNetCore.Identity
- Microsoft.Extensions.Identity.Stores
- Microsoft.AspNetCore.Identity.EntityFrameworkCore
Hawaso.Identity 프로젝트에 ASP.NET Core Identity 적용
PM> Install-Package Microsoft.Extensions.Identity.Core
PM> Install-Package Dapper
PM> Install-Package Dul
PM> Install-Package System.Configuration.ConfigurationManager
ASP.NET Core Identity Providers
내장 ASP.NET Core Identity
외부 Facebook Google GitHub
[동영상 강의] Role 기반으로 권한 설정을하는 초간단 데모
GitHub 경로
https://github.com/VisualAcademy/AspNetCoreIdentity/tree/master/BlazorRoleBasedAuthorization
(1) AspNetCoreIdentity 빈 솔루션에 BlazorRoleBasedAuthorization 이름으로 Blazor Server 프로젝트를 생성합니다.
(2) Startup.cs 파일에 다음 코드를 추가합니다.
(3) /Pages/ RoleBasedAuthorization/AdministratorsOnly.razor 파일에 다음 코드를 작성합니다.
(3) /Pages/ RoleBasedAuthorization/UsersOver.razor 파일에 다음 코드를 작성합니다.
7.2 데이터베이스 구조
(1) Roles 테이블에 2개의 역할(그룹)을 추가합니다.
(2) Register 페이지를 통해서 a@a.com과 b@b.com 계정을 생성합니다.
(3) 각각의 계정에 Role을 추가합니다.
8 [실습] ASP.NET Core Identity가 포함된 웹 프로젝트 생성
9 [실습] 스캐폴드 항목 추가
[실습] 회원가입, 로그인, 로그아웃 기본 코드 탐험 Register Login Logout
SignInManager와 UserManager
SignInManager.PasswordSignInAsync() SignInManager.SignInAsync() – 로그인 처리 UserManager.CreateAsync()
IdentityOptions 클래스로 아이덴터티 설정
IdentityUser를 확장하는 ApplicationUser
코드: ApplicationUser.cs
using Microsoft.AspNetCore.Identity;
namespace VisualAcademy.Models
{
// Add profile data for application users by adding properties to the ApplicationUser class
public class ApplicationUser : IdentityUser
{
/// <summary>
/// 주소
/// </summary>
public string Address { get; set; }
/// <summary>
/// 성별
/// </summary>
public string Gender { get; set; }
}
}
Services.AddIdentity<ApplicatoinUser, IdentityRole>()
Add-Migration AddColumn
Update-Database
@inject SignInManager<IdentityUser> SignInManager
-To-
@inject SignInManager<ApplicationUser> SignInManager
OnModelCreating()
엔터티 형식들
User Role UserClaim UserToken UserLogin RoleClaim UserRole
Identity CLR 형식들 IdentityUser IdentityRole IdentityUserClaim IdentityUserToken IdentityUserLogin IdentityRoleClaim IdentityUserRole
외부 공급자
CookieAuthenticationOptions
Domain Expiration ExpireTimeSpan Name