Dela via


Migrera autentisering och Identity till ASP.NET Core

Av Steve Smith

I föregående artikel vi migrerat konfigurationen från ett ASP.NET MVC-projekt till ASP.NET Core MVC-. I den här artikeln migrerar vi funktionerna för registrering, inloggning och användarhantering.

Konfigurera Identity och medlemskap

I ASP.NET MVC konfigureras autentiserings- och identitetsfunktioner med hjälp av ASP.NET Identity i Startup.Auth.cs och IdentityConfig.cs, som finns i mappen App_Start. I ASP.NET Core MVC konfigureras dessa funktioner i Startup.cs.

Installera följande NuGet-paket:

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

Varning

Den här artikeln visar användningen av anslutningssträngar. Med en lokal databas behöver användaren inte autentiseras, men i produktion innehåller anslutningssträngar ibland ett lösenord för att autentisera. En resursägares lösenordsautentiseringsuppgifter (ROPC) är en säkerhetsrisk som bör undvikas i produktionsdatabaser. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för appar som distribueras till test- eller produktionsmiljöer finns i Säkra autentiseringsflöden.

I Startup.csuppdaterar du metoden Startup.ConfigureServices för att använda Entity Framework och Identity-tjänster:

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();
}

I det här läget finns det två typer som refereras i koden ovan som vi ännu inte har migrerat från ASP.NET MVC-projektet: ApplicationDbContext och ApplicationUser. Skapa en ny Models-mapp i projektet ASP.NET Core och lägg till två klasser som motsvarar dessa typer. Du hittar ASP.NET MVC-versioner av dessa klasser i /Models/IdentityModels.cs, men vi använder en fil per klass i det migrerade projektet eftersom det är tydligare.

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);
        }
    }
}

Webbprojektet ASP.NET Core MVC Starter innehåller inte mycket användaranpassning eller ApplicationDbContext. När du migrerar en riktig app måste du också migrera alla anpassade egenskaper och metoder för appens användare och DbContext klasser, samt andra modellklasser som appen använder. Om din DbContext till exempel har en DbSet<Album>måste du migrera klassen Album.

Med dessa filer på plats kan den Startup.cs filen göras för kompilering genom att uppdatera dess using-instruktioner:

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

Vår app är nu redo att stödja autentisering och Identity tjänster. Den behöver bara ha dessa funktioner exponerade för användare.

Migrera registrerings- och inloggningslogik

Med Identity tjänster som konfigurerats för appen och dataåtkomst som konfigurerats med Entity Framework och SQL Server är vi redo att lägga till stöd för registrering och inloggning i appen. Kom ihåg att vi tidigare i migreringsprocessen kommenterade en referens till _LoginPartial i _Layout.cshtml. Nu är det dags att återgå till koden, avkommentera den och lägga till nödvändiga kontrollanter och vyer för att stödja inloggningsfunktioner.

Ta bort kommentaren på raden @Html.Partial i _Layout.cshtml:

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

Lägg nu till en ny Razor vy med namnet _LoginPartial i mappen Views/Shared:

Uppdatera _LoginPartial.cshtml med följande kod (ersätt allt innehåll):

@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>
}

Nu bör du kunna uppdatera webbplatsen i webbläsaren.

Sammanfattning

ASP.NET Core introducerar ändringar i ASP.NET Identity funktioner. I den här artikeln har du sett hur du migrerar autentiserings- och användarhanteringsfunktionerna i ASP.NET Identity för att ASP.NET Core.