Partager via


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 migreons les fonctionnalités d’inscription, de connexion et de gestion des utilisateurs.

Configurer 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 et Startup.Auth.csIdentityConfig.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

Avertissement

Cet article montre l’utilisation de chaînes de connexion. Avec une base de données locale, l’utilisateur n’a pas besoin d’être authentifié, mais en production, les chaîne de connexion incluent parfois un mot de passe pour s’authentifier. Les informations d’identification de mot de passe du propriétaire de la ressource (ROPC) constituent un risque de sécurité qui doit être évité dans les bases de données de production. Les applications de production doivent utiliser le flux d’authentification le plus sécurisé disponible. Pour plus d’informations sur l’authentification des applications déployées pour tester ou produire des environnements, consultez Flux d’authentification sécurisés.

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

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 Models dans le projet ASP.NET Core et ajoutez deux classes à celles-ci correspondant à ces types. Vous trouverez les versions ASP.NET MVC de ces classes dans /Models/IdentityModels.cs, mais nous allons utiliser un fichier par classe dans le projet migré, car cela est plus clair.

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 ASP.NET Core MVC Starter n’inclut pas beaucoup de personnalisation des utilisateurs, ou le 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 DbContext des classes de votre application, ainsi que toutes les autres classes model utilisées par votre application. Par exemple, si votre DbContext a un DbSet<Album>, vous devez migrer la classe Album.

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

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 Identity les services. Il doit simplement avoir ces fonctionnalités exposées aux utilisateurs.

Migrer l’inscription et la logique de connexion

Avec Identity les services 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.

Décommentez la ligne @Html.Partial dans _Layout.cshtml :

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

À présent, ajoutez une nouvelle Razor vue 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 introduit les modifications apportées aux fonctionnalités de ASP.NET Identity . Dans cet article, vous avez vu comment migrer les fonctionnalités d’authentification et de gestion des utilisateurs de ASP.NET Identity vers ASP.NET Core.