ASP.NET Core Identity

  • 4 minutes to read

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 파일에 다음 코드를 추가합니다.

Starup.cs

(3) /Pages/ RoleBasedAuthorization/AdministratorsOnly.razor 파일에 다음 코드를 작성합니다.

AdministratorsOnly

(3) /Pages/ RoleBasedAuthorization/UsersOver.razor 파일에 다음 코드를 작성합니다.

UsersOver

7.2 데이터베이스 구조

(1) Roles 테이블에 2개의 역할(그룹)을 추가합니다.

Roles

(2) Register 페이지를 통해서 a@a.com과 b@b.com 계정을 생성합니다.

Register

(3) 각각의 계정에 Role을 추가합니다.

Add Roles

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

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