Eseguire la migrazione dell'autenticazione e Identity a ASP.NET Core

Di Steve Smith

Nell'articolo precedente è stata eseguita la migrazione della configurazione da un progetto MVC ASP.NET a ASP.NET Core MVC. In questo articolo viene eseguita la migrazione delle funzionalità di registrazione, accesso e gestione degli utenti.

Configurare e appartenenze Identity

In ASP.NET MVC, l'autenticazione e identity le funzionalità vengono configurate usando ASP.NET Identity in Startup.Auth.cs e IdentityConfig.cs, che si trova nella cartella App_Start . In ASP.NET Core MVC queste funzionalità sono configurate in Startup.cs.

Installare i pacchetti NuGet seguenti:

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

Avviso

Questo articolo illustra l'uso di stringa di connessione. Con un database locale l'utente non deve essere autenticato, ma nell'ambiente di produzione stringa di connessione talvolta include una password per l'autenticazione. Una credenziale della password del proprietario della risorsa (ROPC) è un rischio per la sicurezza che deve essere evitato nei database di produzione. Le app di produzione devono usare il flusso di autenticazione più sicuro disponibile. Per altre informazioni sull'autenticazione per le app distribuite in ambienti di test o di produzione, vedere Proteggere i flussi di autenticazione.

In Startup.csaggiornare il Startup.ConfigureServices metodo per usare Entity Framework e Identity i servizi:

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

A questo punto, nel codice precedente sono presenti due tipi a cui non è ancora stata eseguita la migrazione dal progetto MVC ASP.NET: ApplicationDbContext e ApplicationUser. Creare una nuova cartella Models nel progetto ASP.NET Core e aggiungervi due classi corrispondenti a questi tipi. Si troveranno le versioni MVC ASP.NET di queste classi in /Models/IdentityModels.cs, ma verrà usato un file per classe nel progetto migrato perché è più chiaro.

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

Il progetto Web di base MVC Core ASP.NET non include molte personalizzazioni degli utenti o .ApplicationDbContext Quando si esegue la migrazione di un'app reale, è anche necessario eseguire la migrazione di tutte le proprietà e i metodi personalizzati dell'utente e DbContext delle classi dell'app, nonché di qualsiasi altra classe model usano l'app. Ad esempio, se è DbContext presente un DbSet<Album>oggetto , è necessario eseguire la migrazione della Album classe .

Con questi file sul posto, il Startup.cs file può essere creato per la compilazione aggiornando le relative using istruzioni:

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

L'app è ora pronta per supportare l'autenticazione e Identity i servizi. È sufficiente che queste funzionalità siano esposte agli utenti.

Eseguire la migrazione della logica di registrazione e accesso

Con Identity i servizi configurati per l'app e l'accesso ai dati configurati con Entity Framework e SQL Server, è possibile aggiungere il supporto per la registrazione e l'accesso all'app. Tenere presente che in precedenza nel processo di migrazione è stato impostato un riferimento a _LoginPartial in _Layout.cshtml. È ora possibile tornare a tale codice, rimuovere il commento e aggiungere i controller e le visualizzazioni necessari per supportare la funzionalità di accesso.

Rimuovere il commento dalla @Html.Partial riga in _Layout.cshtml:

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

Aggiungere ora una nuova Razor visualizzazione denominata _LoginPartial alla cartella Views/Shared :

Eseguire l'aggiornamento _LoginPartial.cshtml con il codice seguente (sostituire tutto il relativo contenuto):

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

A questo punto, dovrebbe essere possibile aggiornare il sito nel browser.

Riepilogo

ASP.NET Core introduce modifiche alle funzionalità di ASP.NET Identity . In questo articolo è stato illustrato come eseguire la migrazione delle funzionalità di autenticazione e gestione degli utenti di ASP.NET a ASP.NET Identity Core.