Migrer d’authentification et identité vers ASP.NET CoreMigrate Authentication and Identity to ASP.NET Core

Par Steve SmithBy Steve Smith

Dans l’article précédent, nous migrées de configuration à partir d’un projet ASP.NET MVC vers ASP.NET Core MVC.In the previous article, we migrated configuration from an ASP.NET MVC project to ASP.NET Core MVC. Dans cet article, nous migrons les fonctionnalités de gestion de l’inscription, connexion et un utilisateur.In this article, we migrate the registration, login, and user management features.

Configurer l’identité et appartenanceConfigure Identity and Membership

Dans ASP.NET MVC, les fonctionnalités d’authentification et identité sont configurées à l’aide d’ASP.NET Identity dans Startup.Auth.cs et IdentityConfig.cs, situé dans le App_Start dossier.In ASP.NET MVC, authentication and identity features are configured using ASP.NET Identity in Startup.Auth.cs and IdentityConfig.cs, located in the App_Start folder. Dans ASP.NET Core MVC, ces fonctionnalités sont configurées dans Startup.cs.In ASP.NET Core MVC, these features are configured in Startup.cs.

Installez les packages NuGet Microsoft.AspNetCore.Identity.EntityFrameworkCore et Microsoft.AspNetCore.Authentication.Cookies.Install the Microsoft.AspNetCore.Identity.EntityFrameworkCore and Microsoft.AspNetCore.Authentication.Cookies NuGet packages.

Ensuite, ouvrir Startup.cs et mettre à jour le Startup.ConfigureServices méthode à utiliser les services Entity Framework et d’identité :Then, open Startup.cs and update the Startup.ConfigureServices method to use Entity Framework and Identity 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 nous n’avons pas encore été migrés à partir du projet ASP.NET MVC : ApplicationDbContext et ApplicationUser.At this point, there are two types referenced in the above code that we haven't yet migrated from the ASP.NET MVC project: ApplicationDbContext and ApplicationUser. Créer un nouveau modèles dossier dans ASP.NET Core projet, puis ajoutez deux classes lui correspondant à ces types.Create a new Models folder in the ASP.NET Core project, and add two classes to it corresponding to these types. Vous trouverez ASP.NET MVC versions de ces classes dans /Models/IdentityModels.cs, mais nous allons utiliser un fichier par la classe dans le projet migré puisque c’est plus clair.You will find the ASP.NET MVC versions of these classes in /Models/IdentityModels.cs, but we will use one file per class in the migrated project since that's more clear.

ApplicationUser.cs:ApplicationUser.cs:

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;

namespace NewMvcProject.Models
{
  public class ApplicationUser : IdentityUser
  {
  }
}

ApplicationDbContext.cs:ApplicationDbContext.cs:

using Microsoft.AspNetCore.Identity.EntityFramework;
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 ASP.NET Core MVC Starter Web n’inclut pas grande personnalisation des utilisateurs, ou le ApplicationDbContext.The ASP.NET Core MVC Starter Web project doesn't include much customization of users, or the ApplicationDbContext. Lorsque vous migrez une application réelle, vous devez également migrer toutes les propriétés personnalisées et les méthodes de l’utilisateur de votre application et DbContext classes, ainsi que d’autres classes de modèle, votre application utilise.When migrating a real app, you also need to migrate all of the custom properties and methods of your app's user and DbContext classes, as well as any other Model classes your app utilizes. Par exemple, si votre DbContext a un DbSet<Album>, vous devez migrer le Album classe.For example, if your DbContext has a DbSet<Album>, you need to migrate the Album class.

Avec ces fichiers en place, le Startup.cs fichier peut être apportée à compiler en mettant à jour son using instructions :With these files in place, the Startup.cs file can be made to compile by updating its using statements:

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 des services d’authentification et identité.Our app is now ready to support authentication and Identity services. Il a juste besoin d’activer ces fonctionnalités exposées aux utilisateurs.It just needs to have these features exposed to users.

Migrer la logique de l’inscription et connexionMigrate registration and login logic

Avec les services d’identité configurés pour l’application et l’accès aux données configuré à l’aide d’Entity Framework et SQL Server, nous sommes prêts à ajouter la prise en charge pour l’inscription et connexion à l’application.With Identity services configured for the app and data access configured using Entity Framework and SQL Server, we're ready to add support for registration and login to the app. N’oubliez pas que plus haut dans le processus de migration nous commenté une référence à _LoginPartial dans _Layout.cshtml.Recall that earlier in the migration process we commented out a reference to _LoginPartial in _Layout.cshtml. Il est maintenant temps pour revenir à ce code, supprimez les commentaires et l’ajouter dans les contrôleurs nécessaires et les vues pour prendre en charge la fonctionnalité de connexion.Now it's time to return to that code, uncomment it, and add in the necessary controllers and views to support login functionality.

Supprimez les commentaires de la @Html.Partial de ligne dans _Layout.cshtml:Uncomment the @Html.Partial line in _Layout.cshtml:

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

Maintenant, ajoutez une nouvelle vue Razor appelée _LoginPartial à la Views/Shared dossier :Now, add a new Razor view called _LoginPartial to the Views/Shared folder:

Mise à jour _LoginPartial.cshtml avec le code suivant (Remplacez tout son contenu) :Update _LoginPartial.cshtml with the following code (replace all of its contents):

@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 pouvoir actualiser le site dans votre navigateur.At this point, you should be able to refresh the site in your browser.

RécapitulatifSummary

ASP.NET Core apporte des modifications aux fonctionnalités ASP.NET Identity.ASP.NET Core introduces changes to the ASP.NET Identity features. Dans cet article, vous avez vu comment migrer les fonctionnalités de gestion de l’authentification et l’utilisateur de l’identité d’ASP.NET vers ASP.NET Core.In this article, you have seen how to migrate the authentication and user management features of ASP.NET Identity to ASP.NET Core.