ASP.NET Core로 인증 및 Identity 마이그레이션

작성자 Steve Smith

이전 문서에서는 ASP.NET MVC 프로젝트에서 ASP.NET Core MVC로 구성을 마이그레이션했습니다. 이 문서에서는 등록, 로그인 및 사용자 관리 기능을 마이그레이션합니다.

Identity 및 멤버 자격 구성

ASP.NET MVC에서, 인증 및 ID 기능은 App_Start 폴더에 있는 Startup.Auth.csIdentityConfig.cs의 ASP.NET Identity를 사용하여 구성됩니다. ASP.NET Core MVC에서는 이러한 기능이 구성됩니다 Startup.cs.

다음 NuGet 패키지를 설치합니다.

  • Microsoft.AspNetCore.Identity.EntityFrameworkCore
  • Microsoft.AspNetCore.Authentication.Cookies
  • Microsoft.EntityFrameworkCore.SqlServer

에서 Startup.csEntity Framework 및 Identity 서비스를 사용하도록 메서드를 업데이트 Startup.ConfigureServices 합니다.

public void ConfigureServices(IServiceCollection services)
{
    // Add EF services to the services container.
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

     services.AddMvc();
}

이 시점에서 ASP.NET MVC 프로젝트에서 아직 마이그레이션하지 않은 위의 코드에서 참조된 두 가지 형식인 ApplicationDbContextApplicationUser가 있습니다. ASP.NET Core 프로젝트에 새 Models 폴더를 만들고 이러한 형식에 해당하는 두 개의 클래스를 추가합니다. /Models/IdentityModels.cs에서 이러한 클래스의 ASP.NET MVC 버전을 찾을 수 있지만, 더 명확하기 때문에 마이그레이션된 프로젝트에서 클래스당 하나의 파일을 사용합니다.

ApplicationUser.cs:

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;

namespace NewMvcProject.Models
{
    public class ApplicationUser : IdentityUser
    {
    }
}

ApplicationDbContext.cs:

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.Data.Entity;

namespace NewMvcProject.Models
{
    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
            // Customize the ASP.NET Core Identity model and override the defaults if needed.
            // For example, you can rename the ASP.NET Core Identity table names and more.
            // Add your customizations after calling base.OnModelCreating(builder);
        }
    }
}

ASP.NET Core MVC 스타터 웹 프로젝트에는 사용자 또는 ApplicationDbContext의 사용자 지정이 많이 포함되지 않습니다. 실제 앱을 마이그레이션할 때 앱의 사용자 및 DbContext 클래스의 모든 사용자 지정 속성 및 메서드뿐만 아니라 앱에서 활용하는 다른 모든 모델 클래스도 마이그레이션해야 합니다. 예를 들어 DbContextDbSet<Album>이 있는 경우 Album 클래스를 마이그레이션해야 합니다.

이러한 파일이 있는 경우 Startup.cs 해당 문을 업데이트 using 하여 파일을 컴파일할 수 있습니다.

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

이제 앱에서 인증 및 Identity 서비스를 지원할 준비가 되었습니다. 사용자에게 이러한 기능을 노출해야 합니다.

등록 및 로그인 논리 마이그레이션

Entity Framework 및 SQL Server를 사용하여 구성된 앱 및 데이터 액세스에 대해 구성된 Identity 서비스를 통해 앱에 대한 등록 및 로그인을 위한 지원을 추가할 준비가 되었습니다. 마이그레이션 프로세스의 앞부분에서 _LoginPartial _Layout.cshtml 대한 참조를 주석 처리했습니다. 이제 해당 코드로 돌아가서 주석을 제거하고 로그인 기능을 지원하는 데 필요한 컨트롤러 및 보기를 추가합니다.

_Layout.cshtml에서 @Html.Partial 줄의 주석 처리를 제거합니다.

      <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
    </ul>
    @*@Html.Partial("_LoginPartial")*@
  </div>
</div>

이제 _LoginPartial이라는 새 Razor 보기를 Views/Shared 폴더에 추가합니다.

다음 코드로 업데이트 _LoginPartial.cshtml 합니다(모든 내용 바꾸기).

@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager

@if (SignInManager.IsSignedIn(User))
{
    <form asp-area="" asp-controller="Account" asp-action="Logout" method="post" id="logoutForm" class="navbar-right">
        <ul class="nav navbar-nav navbar-right">
            <li>
                <a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
            </li>
            <li>
                <button type="submit" class="btn btn-link navbar-btn navbar-link">Log out</button>
            </li>
        </ul>
    </form>
}
else
{
    <ul class="nav navbar-nav navbar-right">
        <li><a asp-area="" asp-controller="Account" asp-action="Register">Register</a></li>
        <li><a asp-area="" asp-controller="Account" asp-action="Login">Log in</a></li>
    </ul>
}

이 시점에서 브라우저의 사이트를 새로 고칠 수 있어야 합니다.

요약

ASP.NET Core는 ASP.NET Identity 기능에 변경 사항을 도입합니다. 이 문서에서는 ASP.NET Identity의 인증 및 사용자 관리 기능을 ASP.NET Core로 마이그레이션하는 방법을 알아보았습니다.