Freigeben über


Migrieren der Authentifizierung und Identity zum ASP.NET Core

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 Features für Registrierung, Anmeldung und Benutzerverwaltung.

Konfiguration 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 im Ordner App_Start konfiguriert. In ASP.NET Core MVC werden diese Features in Startup.cskonfiguriert.

Installieren Sie die folgenden NuGet-Pakete:

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

Warnung

In diesem Artikel wird die Verwendung von Verbindungszeichenfolgen dargestellt. Bei einer lokalen Datenbank muss der Benutzer nicht authentifiziert werden, aber in der Produktion enthalten Verbindungszeichenfolge manchmal ein Kennwort für die Authentifizierung. Eine Ressourcenbesitzer-Kennwortanmeldeinformationen (Resource Owner Password Credential, ROPC) stellt ein Sicherheitsrisiko dar und sollte in Produktionsdatenbanken vermieden werden. Produktions-Apps sollten den sichersten verfügbaren Ablauf für die Authentifizierung verwenden. Weitere Informationen zur Authentifizierung für Apps, die für Test- oder Produktionsumgebungen bereitgestellt werden, finden Sie unter Sichere Authentifizierungsflüsse.

In Startup.cs aktualisieren Sie die Methode Startup.ConfigureServices, 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, die wir noch nicht aus dem ASP.NET MVC-Projekt migriert haben: ApplicationDbContext und ApplicationUser. Erstellen Sie einen neuen Ordner "Models" im ASP.NET Core-Projekt, 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 für Benutzer oder der ApplicationDbContext. Bei der Migration einer echten App müssen Sie auch alle benutzerdefinierten Eigenschaften und Methoden der Benutzer und DbContext Klassen Ihrer App sowie alle anderen Modellklassen migrieren, die Ihre App nutzt. Zum Beispiel, wenn Ihr DbContext ein DbSet<Album> hat, müssen Sie die AlbumKlasse migrieren.

Mit diesen Dateien kann die Startup.cs Datei kompiliert werden, indem sie ihre using Anweisungen aktualisiert:

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. Es muss nur diese Features für Benutzer verfügbar gemacht werden.

Migrieren der Registrierungs- und Anmeldelogik

Mit Identity Diensten, die für die App und den Datenzugriff mithilfe von Entity Framework und SQL Server konfiguriert sind, sind wir bereit, Unterstützung für die Registrierung und Anmeldung zur App hinzuzufügen.

Kommentieren Sie die Zeile @Html.Partial in _Layout.cshtml aus.

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

Fügen Sie nun eine neue Razor Ansicht namens _LoginPartial zum Ordner "Ansichten/Freigegeben" hinzu:

Aktualisieren Sie _LoginPartial.cshtml mit dem 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>
}

Zu diesem Zeitpunkt 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.