Migrieren von Authentifizierung und Identity zu ASP.NET Core 2.0

Von Steve Smith

Im vorherigen Artikel haben wir die Konfiguration von einem ASP.NET MVC-Projekt zu ASP.NET Core MVC migriert. In diesem Artikel migrieren wir die Registrierungs-, Anmelde- und Benutzerverwaltungsfeatures.

Konfigurieren von Identity und Mitgliedschaft

In ASP.NET MVC werden Authentifizierungs- und Identitätsfeatures mithilfe von ASP.NET Identity in Startup.Auth.cs und IdentityConfig.cs konfiguriert, die sich im Ordner App_Start befinden. In ASP.NET Core MVC werden diese Features in Startup.cs konfiguriert.

Installieren Sie die folgenden NuGet-Pakete:

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

Aktualisieren Sie in Startup.cs die Startup.ConfigureServices-Methode, um Entity Framework und Identity-Dienste zu verwenden:

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

An diesem Punkt gibt es zwei Typen, auf die im obigen Code verwiesen wird, auf die wir noch nicht aus dem ASP.NET MVC-Projekt migriert haben: ApplicationDbContext und ApplicationUser. Erstellen Sie einen neuen Models-Ordner im Projekt ASP.NET Core, und fügen Sie diesem zwei Klassen hinzu, die diesen Typen entsprechen. Sie finden die ASP.NET MVC-Versionen dieser Klassen in /Models/IdentityModels.cs, aber wir verwenden eine Datei pro Klasse im migrierten Projekt, da dies klarer ist.

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

Das ASP.NET Core MVC Starter-Webprojekt enthält nicht viele Anpassungen von Benutzern oder ApplicationDbContext. Wenn Sie eine echte App migrieren, müssen Sie auch alle benutzerdefinierten Eigenschaften und Methoden der Benutzer und DbContext-Klassen Ihrer App sowie alle anderen Modellklassen, die Ihre App verwendet, migrieren. Wenn Ihr DbContext beispielsweise über einen DbSet<Album> verfügt, müssen Sie die Album-Klasse migrieren.

Wenn diese Dateien vorhanden sind, kann die Startup.cs-Datei so kompiliert werden, dass ihre using-Anweisungen aktualisiert werden:

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

Unsere App ist jetzt bereit, Authentifizierung und Identity-Dienste zu unterstützen. Sie muss nur diese Features den Benutzern zur Verfügung stellen.

Migrieren der Registrierungs- und Anmeldelogik

Da Identity-Dienste für die App und den Datenzugriff konfiguriert sind, die mithilfe von Entity Framework und SQL Server konfiguriert wurden, können wir Support für die Registrierung und Anmeldung für die App hinzufügen. Denken Sie daran, dass wir zuvor im Migrationsprozess einen Verweis auf _LoginPartial in _Layout.cshtmlauskommentiert haben. Nun ist es an der Zeit, zu diesem Code zurückzukehren, die Auskommentierung aufzuheben und die erforderlichen Controller und Ansichten hinzuzufügen, um Anmeldefunktionen zu unterstützen.

Heben Sie die Auskommentierung der @Html.Partial-Linie in _Layout.cshtml auf:

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

Fügen Sie nun eine neue Razor Ansicht mit dem Namen _LoginPartial zum Ordner Ansichten/Freigegeben hinzu:

Aktualisieren Sie _LoginPartial.cshtml durch den folgenden Code (ersetzen Sie den gesamten Inhalt):

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

An diesem Punkt sollten Sie in der Lage sein, die Website in Ihrem Browser zu aktualisieren.

Zusammenfassung

ASP.NET Core führt Änderungen an den ASP.NET Identity Features ein. In diesem Artikel haben Sie erfahren, wie Sie die Authentifizierungs- und Benutzerverwaltungsfunktionen von ASP.NET Identity zu ASP.NET Core migrieren.