Migrowanie uwierzytelniania i Identity do ASP.NET Core
Autor: Steve Smith
W poprzednim artykule zmigrowaliśmy konfigurację z projektu MVC ASP.NET do ASP.NET Core MVC. W tym artykule migrujemy funkcje rejestracji, logowania i zarządzania użytkownikami.
Konfigurowanie Identity i członkostwo
W ASP.NET MVC uwierzytelnianie i identity funkcje są konfigurowane przy użyciu ASP.NET Identity w Startup.Auth.cs
systemach i IdentityConfig.cs
znajdujących się w folderze App_Start . W usłudze ASP.NET Core MVC te funkcje są konfigurowane w programie Startup.cs
.
Zainstaluj następujące pakiety NuGet:
Microsoft.AspNetCore.Identity.EntityFrameworkCore
Microsoft.AspNetCore.Authentication.Cookies
Microsoft.EntityFrameworkCore.SqlServer
Ostrzeżenie
W tym artykule przedstawiono użycie parametry połączenia. W przypadku lokalnej bazy danych użytkownik nie musi być uwierzytelniany, ale w środowisku produkcyjnym parametry połączenia czasami zawiera hasło do uwierzytelniania. Poświadczenie hasła właściciela zasobu (ROPC) jest zagrożeniem bezpieczeństwa, którego należy unikać w produkcyjnych bazach danych. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania aplikacji wdrożonych w środowiskach testowych lub produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
W Startup.cs
programie zaktualizuj metodę Startup.ConfigureServices
tak, aby korzystała z programu Entity Framework i Identity usług:
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();
}
W tym momencie istnieją dwa typy, do których odwołujemy się w powyższym kodzie, które nie zostały jeszcze zmigrowane z projektu ASP.NET MVC: ApplicationDbContext
i ApplicationUser
. Utwórz nowy folder Models w projekcie ASP.NET Core i dodaj do niego dwie klasy odpowiadające tym typom. Wersje MVC tych klas ASP.NET znajdują się w /Models/IdentityModels.cs
pliku , ale użyjemy jednego pliku na klasę w zmigrowanym projekcie, ponieważ jest to bardziej jasne.
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);
}
}
}
Projekt sieci Web ASP.NET Core MVC Starter nie obejmuje wielu dostosowań użytkowników ani .ApplicationDbContext
Podczas migrowania rzeczywistej aplikacji należy również przeprowadzić migrację wszystkich właściwości niestandardowych i metod użytkowników i DbContext
klas aplikacji, a także innych klas modelu używanych przez aplikację. Jeśli na przykład DbContext
masz klasę DbSet<Album>
, musisz przeprowadzić migrację Album
klasy.
Po wprowadzeniu tych plików plik można skompilować, Startup.cs
aktualizując jego using
instrukcje:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
Nasza aplikacja jest teraz gotowa do obsługi uwierzytelniania i Identity usług. Wystarczy, że te funkcje będą widoczne dla użytkowników.
Migrowanie logiki rejestracji i logowania
W przypadku Identity usług skonfigurowanych dla aplikacji i dostępu do danych skonfigurowanych przy użyciu programu Entity Framework i programu SQL Server możemy dodać obsługę rejestracji i logowania do aplikacji. Przypomnij sobie, że wcześniej w procesie migracji oznaczyliśmy odwołanie do _LoginPartial w pliku _Layout.cshtml
. Teraz nadszedł czas, aby powrócić do tego kodu, usunąć komentarz i dodać niezbędne kontrolery i widoki do obsługi funkcji logowania.
Usuń komentarz z wiersza w pliku @Html.Partial
_Layout.cshtml
:
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
@*@Html.Partial("_LoginPartial")*@
</div>
</div>
Teraz dodaj nowy Razor widok o nazwie _LoginPartial do folderu Views/Shared :
Zaktualizuj _LoginPartial.cshtml
za pomocą następującego kodu (zastąp całą jego zawartość):
@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>
}
Na tym etapie powinno być możliwe odświeżenie witryny w przeglądarce.
Podsumowanie
ASP.NET Core wprowadza zmiany w funkcjach ASP.NET Identity . W tym artykule przedstawiono sposób migrowania funkcji uwierzytelniania i zarządzania użytkownikami ASP.NET Identity do ASP.NET Core.