Verificatie en Identity migreren naar ASP.NET Core
Door Steve Smith
In het vorige artikel we een gemigreerde configuratie van een ASP.NET MVC-project naar ASP.NET Core MVC-. In dit artikel migreren we de functies voor registratie, aanmelding en gebruikersbeheer.
Identity en lidmaatschap configureren
In ASP.NET MVC worden verificatie- en identiteitsfuncties geconfigureerd met behulp van ASP.NET Identity in Startup.Auth.cs
en IdentityConfig.cs
, die zich in de map App_Start bevinden. In ASP.NET Core MVC worden deze functies geconfigureerd in Startup.cs
.
Installeer de volgende NuGet-pakketten:
Microsoft.AspNetCore.Identity.EntityFrameworkCore
Microsoft.AspNetCore.Authentication.Cookies
Microsoft.EntityFrameworkCore.SqlServer
Waarschuwing
In dit artikel wordt het gebruik van verbindingsreeksen beschreven. Met een lokale database hoeft de gebruiker niet te worden geverifieerd, maar in productie bevatten verbindingsreeksen soms een wachtwoord om te verifiëren. Een wachtwoordreferentie voor een resource-eigenaar (ROPC) is een beveiligingsrisico dat moet worden vermeden in productiedatabases. Productie-apps moeten gebruikmaken van de veiligste verificatiestroom die beschikbaar is. Zie Beveiligde verificatiestromenvoor meer informatie over verificatie voor apps die zijn geïmplementeerd voor test- of productieomgevingen.
Werk in Startup.cs
de Startup.ConfigureServices
methode bij voor het gebruik van Entity Framework- en Identity-services:
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();
}
Op dit moment zijn er twee typen waarnaar wordt verwezen in de bovenstaande code die we nog niet hebben gemigreerd vanuit het ASP.NET MVC-project: ApplicationDbContext
en ApplicationUser
. Maak een nieuwe map Modellen in het ASP.NET Core-project en voeg er twee klassen aan toe die overeenkomen met deze typen. U vindt de ASP.NET MVC-versies van deze klassen in /Models/IdentityModels.cs
, maar we gebruiken één bestand per klasse in het gemigreerde project, omdat dat duidelijker is.
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);
}
}
}
Het ASP.NET Core MVC Starterwebproject bevat niet veel mogelijkheden voor gebruikersaanpassing of het ApplicationDbContext
. Wanneer u een echte app migreert, moet u ook alle aangepaste eigenschappen en methoden van de gebruikers- en DbContext
-klassen van uw app migreren, evenals eventuele andere modelklassen die uw app gebruikt. Als uw DbContext
bijvoorbeeld een DbSet<Album>
heeft, moet u de Album
-klasse migreren.
Met deze bestanden kan het Startup.cs
bestand worden gecompileerd door de using
instructies bij te werken.
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
Onze app is nu klaar om verificatie en Identity services te ondersteunen. Deze functies moeten alleen zichtbaar zijn voor gebruikers.
Registratie- en aanmeldingslogica migreren
Nu Identity services zijn geconfigureerd voor de app en gegevenstoegang die zijn geconfigureerd met Entity Framework en SQL Server, zijn we klaar om ondersteuning toe te voegen voor registratie en aanmelding bij de app. Zoals u weet, eerder in het migratieproces we een verwijzing naar _LoginPartial in _Layout.cshtml
hebben gemaakt. Nu is het tijd om terug te keren naar die code, opmerkingen te verwijderen en de benodigde controllers en weergaven toe te voegen om aanmeldingsfunctionaliteit te ondersteunen.
Verwijder opmerkingen bij de @Html.Partial
regel in _Layout.cshtml
:
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
@*@Html.Partial("_LoginPartial")*@
</div>
</div>
Voeg nu een nieuwe Razor weergave met de naam _LoginPartial toe aan de map Views/Shared:
Werk _LoginPartial.cshtml
bij met de volgende code (vervang alle inhoud ervan):
@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>
}
Op dit moment moet u de site in uw browser kunnen vernieuwen.
Samenvatting
ASP.NET Core introduceert wijzigingen in de functies van de ASP.NET Identity. In dit artikel hebt u gezien hoe u de functies voor verificatie en gebruikersbeheer van ASP.NET Identity migreert naar ASP.NET Core.