다음을 통해 공유


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

작성자 Steve Smith

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

Identity 및 멤버 자격 구성

ASP.NET MVC에서 인증 및 identity 기능은 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

Warning

이 문서에서는 연결 문자열 사용을 보여 줍니다. 로컬 데이터베이스를 사용하면 사용자를 인증할 필요가 없지만 프로덕션 환경에서는 연결 문자열 인증할 암호를 포함하는 경우가 있습니다. ROPC(리소스 소유자 암호 자격 증명)는 프로덕션 데이터베이스에서 피해야 하는 보안 위험입니다. 프로덕션 앱은 사용 가능한 가장 안전한 인증 흐름을 사용해야 합니다. 테스트 또는 프로덕션 환경에 배포된 앱의 인증에 대한 자세한 내용은 보안 인증 흐름을 참조 하세요.

에서 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로 마이그레이션하는 방법을 알아보았습니다.