Migrer l’authentification et Identity vers ASP.NET Core

Par Steve Smith

Dans l’article précédent, nous avons migré la configuration d’un projet ASP.NET MVC vers ASP.NET Core MVC. Dans cet article, nous allons migrer les fonctionnalités d’inscription, de connexion et de gestion des utilisateurs.

Configuration de Identity et adhésion

Dans ASP.NET MVC, les fonctionnalités d’authentification et d’identité sont configurées à l’aide de ASP.NET Identity dans Startup.Auth.cs et IdentityConfig.cs, situées dans le dossier App_Start. Dans ASP.NET Core MVC, ces fonctionnalités sont configurées dans Startup.cs.

Installez les packages NuGet suivants :

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

Dans Startup.cs, mettez à jour la méthode Startup.ConfigureServices pour utiliser Entity Framework et les services Identity :

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

À ce stade, il existe deux types référencés dans le code ci-dessus que nous n’avons pas encore migrés à partir du projet ASP.NET MVC : ApplicationDbContext et ApplicationUser. Créez un dossier Modèles dans le projet ASP.NET Core et ajoutez-y deux classes correspondant à ces types. Vous trouverez les versions ASP.NET MVC de ces classes dans /Models/IdentityModels.cs, mais nous utiliserons un fichier par classe dans le projet migré, c’est plus clair ainsi.

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

Le projet Web de démarrage ASP.NET Core MVC n’inclut pas beaucoup de personnalisation des utilisateurs, ou ApplicationDbContext. Lors de la migration d’une application réelle, vous devez également migrer toutes les propriétés et méthodes personnalisées de l’utilisateur et des classes DbContext de votre application, ainsi que toutes les autres classes de modèle utilisées par votre application. Par exemple, si votre DbContext a un DbSet<Album>, vous devez migrer la classe Album.

Une fois ces fichiers en place, le fichier Startup.cs peut être compilé en mettant à jour ses instructions using :

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

Notre application est maintenant prête à prendre en charge l’authentification et les services Identity. Ces fonctionnalités doivent simplement être exposées aux utilisateurs.

Migrer la logique d’inscription et de connexion

Avec les services Identity configurés pour l’application et l’accès aux données configurés à l’aide d’Entity Framework et de SQL Server, nous sommes prêts à ajouter la prise en charge de l’inscription et de la connexion à l’application. Rappelez-vous que précédemment dans le processus de migration, nous avons commenté une référence à _LoginPartial dans _Layout.cshtml. Il est maintenant temps de revenir à ce code, d’en supprimer les marques de commentaire et d’ajouter les contrôleurs et les vues nécessaires pour prendre en charge la fonctionnalité de connexion.

Supprimez les marques de commentaire de la ligne @Html.Partial dans _Layout.cshtml :

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

Maintenant, ajoutez une nouvelle vue Razor appelée _LoginPartial au dossier Views/Shared :

Mettez à jour _LoginPartial.cshtml avec le code suivant (remplacez tout son contenu) :

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

À ce stade, vous devez être en mesure d’actualiser le site dans votre navigateur.

Résumé

ASP.NET Core apporte des modifications aux fonctionnalités ASP.NET Identity. Dans cet article, vous avez vu comment migrer les fonctionnalités d’authentification et de gestion des utilisateurs d’ASP.NET Identity vers ASP.NET Core.