ASP.NET Core로 인증 및 Identity 마이그레이션
작성자: Steve Smith
이전 문서에서는 ASP.NET MVC 프로젝트에서 ASP.NET Core MVC로 구성을 마이그레이션했습니다. 이 문서에서는 등록, 로그인 및 사용자 관리 기능을 마이그레이션합니다.
Identity 및 멤버 자격 구성
ASP.NET MVC에서, 인증 및 ID 기능은 App_Start 폴더에 있는 Startup.Auth.cs
및IdentityConfig.cs
의 ASP.NET Identity를 사용하여 구성됩니다. ASP.NET Core MVC에서 이러한 기능은 Startup.cs
에서 구성됩니다.
다음 NuGet 패키지를 설치합니다.
Microsoft.AspNetCore.Identity.EntityFrameworkCore
Microsoft.AspNetCore.Authentication.Cookies
Microsoft.EntityFrameworkCore.SqlServer
Startup.cs
에서 Entity 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 프로젝트에서 아직 마이그레이션하지 않은 위의 코드에서 참조된 두 가지 형식인 ApplicationDbContext
및 ApplicationUser
가 있습니다. 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
클래스의 모든 사용자 지정 속성 및 메서드뿐만 아니라 앱에서 활용하는 다른 모든 모델 클래스도 마이그레이션해야 합니다. 예를 들어 DbContext
에 DbSet<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 서비스를 통해 앱에 대한 등록 및 로그인을 위한 지원을 추가할 준비가 되었습니다. 마이그레이션 프로세스의 앞부분을 상기해보면 _Layout.cshtml
의 _LoginPartial에 대한 참조를 주석으로 처리했습니다. 이제 해당 코드로 돌아가서 주석을 제거하고 로그인 기능을 지원하는 데 필요한 컨트롤러 및 보기를 추가합니다.
_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로 마이그레이션하는 방법을 알아보았습니다.