Identité de l’échafaudage dans les projets ASP.NET CoreScaffold Identity in ASP.NET Core projects

De Rick AndersonBy Rick Anderson

ASP.NET Core 2,1 et versions ultérieures fournissent ASP.net Core identité sous forme de bibliothèque de classes Razor.ASP.NET Core 2.1 and later provides ASP.NET Core Identity as a Razor Class Library. Les applications qui incluent une identité peuvent appliquer l’échafaudage pour ajouter de manière sélective le code source contenu dans la bibliothèque de classes Razor d’identité (RCL).Applications that include Identity can apply the scaffolder to selectively add the source code contained in the Identity Razor Class Library (RCL). Vous pouvez souhaiter générer le code source afin de pouvoir modifier le code et changer le comportement.You might want to generate source code so you can modify the code and change the behavior. Par exemple, vous pouvez demander au générateur de modèles automatique de générer le code utilisé dans l’inscription.For example, you could instruct the scaffolder to generate the code used in registration. Le code généré est prioritaire sur le même code dans la bibliothèque de classes Razor d’identité.Generated code takes precedence over the same code in the Identity RCL. Pour obtenir le contrôle total de l’interface utilisateur et ne pas utiliser le RCL par défaut, consultez la section créer une source d’interface utilisateur d’identité complète.To gain full control of the UI and not use the default RCL, see the section Create full identity UI source.

Les applications qui n’incluent pas l’authentification peuvent appliquer l’échafaudage pour ajouter le package d’identité RCL.Applications that do not include authentication can apply the scaffolder to add the RCL Identity package. Vous pouvez sélectionner le code d’identité à générer.You have the option of selecting Identity code to be generated.

Bien que le générateur de modèles génère la plus grande partie du code nécessaire, vous devez mettre à jour votre projet pour terminer le processus.Although the scaffolder generates most of the necessary code, you'll have to update your project to complete the process. Ce document explique les étapes nécessaires pour effectuer une mise à jour de l’échafaudage d’identité.This document explains the steps needed to complete an Identity scaffolding update.

Lorsque l’échafaudage d’identité est exécuté, un fichier ScaffoldingReadme. txt est créé dans le répertoire du projet.When the Identity scaffolder is run, a ScaffoldingReadme.txt file is created in the project directory. Le fichier ScaffoldingReadme. txt contient des instructions générales sur ce qui est nécessaire pour effectuer la mise à jour de l’échafaudage d’identité.The ScaffoldingReadme.txt file contains general instructions on what's needed to complete the Identity scaffolding update. Ce document contient des instructions plus complètes que le fichier ScaffoldingReadme. txt .This document contains more complete instructions than the ScaffoldingReadme.txt file.

Nous vous recommandons d’utiliser un système de contrôle de code source qui affiche les différences entre les fichiers et vous permet d’annuler les modifications.We recommend using a source control system that shows file differences and allows you to back out of changes. Inspectez les modifications après avoir exécuté l’échafaudage d’identité.Inspect the changes after running the Identity scaffolder.

Notes

Les services sont requis lors de l’utilisation de l’authentification à deux facteurs, la confirmation de compte et la récupération de mot de passe, ainsi que d’autres fonctionnalités de sécurité avec identité.Services are required when using Two Factor Authentication, Account confirmation and password recovery, and other security features with Identity. Les services ou stubs de service ne sont pas générés lors de la génération de modèles automatique d’identité.Services or service stubs aren't generated when scaffolding Identity. Les services pour activer ces fonctionnalités doivent être ajoutés manuellement.Services to enable these features must be added manually. Par exemple, consultez exiger une confirmation par courrier électronique.For example, see Require Email Confirmation.

Identité de l’échafaudage dans un projet videScaffold identity into an empty project

Exécutez l’échafaudage d’identité:Run the Identity scaffolder:

  • À partir de l’Explorateur de solutions, avec le bouton droit sur le projet > ajouter > nouvel élément structuré.From Solution Explorer, right-click on the project > Add > New Scaffolded Item.
  • Dans le volet gauche de la ajouter une structure boîte de dialogue, sélectionnez identité > ajouter.From the left pane of the Add Scaffold dialog, select Identity > ADD.
  • Dans la boîte de dialogue Ajouter une identité , sélectionnez les options souhaitées.In the ADD Identity dialog, select the options you want.
    • Sélectionnez votre page de disposition existante, ou votre fichier de disposition sera remplacé par un balisage incorrect.Select your existing layout page, or your layout file will be overwritten with incorrect markup. Par exemple ~/Pages/Shared/_Layout.cshtml , pour ~/Views/Shared/_Layout.cshtml les Razor pages pour les projets MVCFor example ~/Pages/Shared/_Layout.cshtml for Razor Pages ~/Views/Shared/_Layout.cshtml for MVC projects
    • Sélectionnez le + bouton pour créer un nouveau classe de contexte de données.Select the + button to create a new Data context class.
  • Sélectionnez ajouter.Select ADD.

Ajoutez les appels en surbrillance suivants à la classe Startup :Add the following highlighted calls to the Startup class:

public class Startup
{        
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseAuthentication();
        app.UseMvc();
    }
}

UseHsts est recommandé mais pas obligatoire.UseHsts is recommended but not required. Consultez protocole HTTP Strict Transport Security pour plus d’informations.See HTTP Strict Transport Security Protocol for more information.

Le code de base de données d’identité généré requiert des migrations de Entity Framework Core.The generated Identity database code requires Entity Framework Core Migrations. Créer une migration et mettre à jour de la base de données.Create a migration and update the database. Par exemple, exécutez les commandes suivantes :For example, run the following commands:

Dans Visual Studio Console du Gestionnaire de Package:In the Visual Studio Package Manager Console:

Add-Migration CreateIdentitySchema
Update-Database

Le paramètre de nom « CreateIdentitySchema » de Add-Migration la commande est arbitraire.The "CreateIdentitySchema" name parameter for the Add-Migration command is arbitrary. "CreateIdentitySchema"décrit la migration."CreateIdentitySchema" describes the migration.

Identité de l’échafaudage dans un projet Razor sans autorisation existanteScaffold identity into a Razor project without existing authorization

Exécutez l’échafaudage d’identité:Run the Identity scaffolder:

  • À partir de l’Explorateur de solutions, avec le bouton droit sur le projet > ajouter > nouvel élément structuré.From Solution Explorer, right-click on the project > Add > New Scaffolded Item.
  • Dans le volet gauche de la ajouter une structure boîte de dialogue, sélectionnez identité > ajouter.From the left pane of the Add Scaffold dialog, select Identity > ADD.
  • Dans la boîte de dialogue Ajouter une identité , sélectionnez les options souhaitées.In the ADD Identity dialog, select the options you want.
    • Sélectionnez votre page de disposition existante, ou votre fichier de disposition sera remplacé par un balisage incorrect.Select your existing layout page, or your layout file will be overwritten with incorrect markup. Par exemple ~/Pages/Shared/_Layout.cshtml , pour ~/Views/Shared/_Layout.cshtml les Razor pages pour les projets MVCFor example ~/Pages/Shared/_Layout.cshtml for Razor Pages ~/Views/Shared/_Layout.cshtml for MVC projects
    • Sélectionnez le + bouton pour créer un nouveau classe de contexte de données.Select the + button to create a new Data context class.
  • Sélectionnez ajouter.Select ADD.

L’identité est configurée dans Areas/Identity/IdentityHostingStartup. cs.Identity is configured in Areas/Identity/IdentityHostingStartup.cs. Pour plus d’informations, consultez IHostingStartup.for more information, see IHostingStartup.

Migrations, UseAuthentication et dispositionMigrations, UseAuthentication, and layout

Le code de base de données d’identité généré requiert des migrations de Entity Framework Core.The generated Identity database code requires Entity Framework Core Migrations. Créer une migration et mettre à jour de la base de données.Create a migration and update the database. Par exemple, exécutez les commandes suivantes :For example, run the following commands:

Dans Visual Studio Console du Gestionnaire de Package:In the Visual Studio Package Manager Console:

Add-Migration CreateIdentitySchema
Update-Database

Le paramètre de nom « CreateIdentitySchema » de Add-Migration la commande est arbitraire.The "CreateIdentitySchema" name parameter for the Add-Migration command is arbitrary. "CreateIdentitySchema"décrit la migration."CreateIdentitySchema" describes the migration.

Activer l’authentificationEnable authentication

Dans la méthode Configure de la classe Startup, appelez UseAuthentication après UseStaticFiles:In the Configure method of the Startup class, call UseAuthentication after UseStaticFiles:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseAuthentication();

        app.UseMvc();
    }
}

UseHsts est recommandé mais pas obligatoire.UseHsts is recommended but not required. Consultez protocole HTTP Strict Transport Security pour plus d’informations.See HTTP Strict Transport Security Protocol for more information.

Modifications de la dispositionLayout changes

Facultatif : ajoutez la connexion partielle (_LoginPartial) au fichier de disposition :Optional: Add the login partial (_LoginPartial) to the layout file:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - RazorNoAuth8</title>

    <environment include="Development">
        <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
        <link rel="stylesheet" href="~/css/site.css" />
    </environment>
    <environment exclude="Development">
        <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
              asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
              asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
        <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
    </environment>
</head>
<body>
    <nav class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a asp-page="/Index" class="navbar-brand">RazorNoAuth8</a>
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li><a asp-page="/Index">Home</a></li>
                    <li><a asp-page="/About">About</a></li>
                    <li><a asp-page="/Contact">Contact</a></li>
                </ul>
                <partial name="_LoginPartial" />
            </div>
        </div>
    </nav>

    <partial name="_CookieConsentPartial" />

    <div class="container body-content">
        @RenderBody()
        <hr />
        <footer>
            <p>&copy; 2018 - RazorNoAuth8</p>
        </footer>
    </div>

    <environment include="Development">
        <script src="~/lib/jquery/dist/jquery.js"></script>
        <script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
        <script src="~/js/site.js" asp-append-version="true"></script>
    </environment>
    <environment exclude="Development">
        <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.3.1.min.js"
                asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
                asp-fallback-test="window.jQuery"
                crossorigin="anonymous"
                integrity="sha384-K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBo/hH+8Fk">
        </script>
        <script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
                asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
                asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
                crossorigin="anonymous"
                integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa">
        </script>
        <script src="~/js/site.min.js" asp-append-version="true"></script>
    </environment>

    @RenderSection("Scripts", required: false)
</body>
</html>

Identité de l’échafaudage dans un projet Razor avec autorisationScaffold identity into a Razor project with authorization

Exécutez l’échafaudage d’identité :Run the Identity scaffolder:

  • Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet > Ajouter > nouvel élément de génération de modèlesautomatique.From Solution Explorer, right-click on the project > Add > New Scaffolded Item.
  • Dans le volet gauche de la boîte de dialogue Ajouter une structure , sélectionnez identité > Ajouter.From the left pane of the Add Scaffold dialog, select Identity > Add.
  • Dans la boîte de dialogue Ajouter une identité , sélectionnez les options souhaitées.In the Add Identity dialog, select the options you want.
    • Sélectionnez votre page de disposition existante, ou votre fichier de disposition sera remplacé par un balisage incorrect.Select your existing layout page, or your layout file will be overwritten with incorrect markup. Lorsqu’un fichier _Layout. cshtml existant est sélectionné, il n’est pas remplacé.When an existing _Layout.cshtml file is selected, it is not overwritten.

Par exemple : ~/Pages/Shared/_Layout.cshtml pour Razor Pages ~/Views/Shared/_Layout.cshtml pour les projets MVCFor example: ~/Pages/Shared/_Layout.cshtml for Razor Pages ~/Views/Shared/_Layout.cshtml for MVC projects

  • Pour utiliser le contexte de données existant, sélectionnez au moins un fichier à substituer.To use your existing data context, select at least one file to override. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.You must select at least one file to add your data context.
    • Sélectionnez votre classe de contexte de données.Select your data context class.
    • Sélectionnez Ajouter .Select Add.
  • Pour créer un nouveau contexte utilisateur et éventuellement créer une classe d’utilisateur personnalisée pour l’identité :To create a new user context and possibly create a custom user class for Identity:
    • Sélectionnez le bouton + pour créer une classe de contexte de données.Select the + button to create a new Data context class.
    • Sélectionnez Ajouter .Select Add.

Remarque : Si vous créez un nouveau contexte utilisateur, vous n’êtes pas obligé de sélectionner un fichier à remplacer.Note: If you're creating a new user context, you don't have to select a file to override.

Certaines options d’identité sont configurées dans Areas/Identity/IdentityHostingStartup. cs.Some Identity options are configured in Areas/Identity/IdentityHostingStartup.cs. Pour plus d’informations, consultez IHostingStartup.For more information, see IHostingStartup.

Identité de l’échafaudage dans un projet MVC sans autorisation existanteScaffold identity into an MVC project without existing authorization

Exécutez l’échafaudage d’identité:Run the Identity scaffolder:

  • À partir de l’Explorateur de solutions, avec le bouton droit sur le projet > ajouter > nouvel élément structuré.From Solution Explorer, right-click on the project > Add > New Scaffolded Item.
  • Dans le volet gauche de la ajouter une structure boîte de dialogue, sélectionnez identité > ajouter.From the left pane of the Add Scaffold dialog, select Identity > ADD.
  • Dans la boîte de dialogue Ajouter une identité , sélectionnez les options souhaitées.In the ADD Identity dialog, select the options you want.
    • Sélectionnez votre page de disposition existante, ou votre fichier de disposition sera remplacé par un balisage incorrect.Select your existing layout page, or your layout file will be overwritten with incorrect markup. Par exemple ~/Pages/Shared/_Layout.cshtml , pour ~/Views/Shared/_Layout.cshtml les Razor pages pour les projets MVCFor example ~/Pages/Shared/_Layout.cshtml for Razor Pages ~/Views/Shared/_Layout.cshtml for MVC projects
    • Sélectionnez le + bouton pour créer un nouveau classe de contexte de données.Select the + button to create a new Data context class.
  • Sélectionnez ajouter.Select ADD.

Facultatif : ajoutez la connexion partielle (_LoginPartial) au fichier Views/Shared/_ Layout. cshtml :Optional: Add the login partial (_LoginPartial) to the Views/Shared/_Layout.cshtml file:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - MvcNoAuth3</title>

    <environment include="Development">
        <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
        <link rel="stylesheet" href="~/css/site.css" />
    </environment>
    <environment exclude="Development">
        <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
              asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
              asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
        <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
    </environment>
</head>
<body>
    <nav class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">MvcNoAuth3</a>
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
                    <li><a asp-area="" asp-controller="Home" asp-action="About">About</a></li>
                    <li><a asp-area="" asp-controller="Home" asp-action="Contact">Contact</a></li>
                </ul>
                <partial name="_LoginPartial" />
            </div>
        </div>
    </nav>

    <partial name="_CookieConsentPartial" />

    <div class="container body-content">
        @RenderBody()
        <hr />
        <footer>
            <p>&copy; 2018 - MvcNoAuth3</p>
        </footer>
    </div>

    <environment include="Development">
        <script src="~/lib/jquery/dist/jquery.js"></script>
        <script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
        <script src="~/js/site.js" asp-append-version="true"></script>
    </environment>
    <environment exclude="Development">
        <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.3.1.min.js"
                asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
                asp-fallback-test="window.jQuery"
                crossorigin="anonymous"
                integrity="sha384-K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBo/hH+8Fk">
        </script>
        <script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
                asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
                asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
                crossorigin="anonymous"
                integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa">
        </script>
        <script src="~/js/site.min.js" asp-append-version="true"></script>
    </environment>

    @RenderSection("Scripts", required: false)
</body>
</html>
  • Déplacez le fichier pages/Shared/_LoginPartial. cshtml vers Views/Shared/_LoginPartial. cshtmlMove the Pages/Shared/_LoginPartial.cshtml file to Views/Shared/_LoginPartial.cshtml

L’identité est configurée dans Areas/Identity/IdentityHostingStartup. cs.Identity is configured in Areas/Identity/IdentityHostingStartup.cs. Pour plus d’informations, consultez IHostingStartup.For more information, see IHostingStartup.

Le code de base de données d’identité généré requiert des migrations de Entity Framework Core.The generated Identity database code requires Entity Framework Core Migrations. Créer une migration et mettre à jour de la base de données.Create a migration and update the database. Par exemple, exécutez les commandes suivantes :For example, run the following commands:

Dans Visual Studio Console du Gestionnaire de Package:In the Visual Studio Package Manager Console:

Add-Migration CreateIdentitySchema
Update-Database

Le paramètre de nom « CreateIdentitySchema » de Add-Migration la commande est arbitraire.The "CreateIdentitySchema" name parameter for the Add-Migration command is arbitrary. "CreateIdentitySchema"décrit la migration."CreateIdentitySchema" describes the migration.

Appelez UseAuthentication après UseStaticFiles:Call UseAuthentication after UseStaticFiles:

public class Startup
{

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseAuthentication();
        app.UseMvcWithDefaultRoute();
    }
}

UseHsts est recommandé mais pas obligatoire.UseHsts is recommended but not required. Consultez protocole HTTP Strict Transport Security pour plus d’informations.See HTTP Strict Transport Security Protocol for more information.

Identité de l’échafaudage dans un projet MVC avec autorisationScaffold identity into an MVC project with authorization

Exécutez l’échafaudage d’identité :Run the Identity scaffolder:

  • Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet > Ajouter > nouvel élément de génération de modèlesautomatique.From Solution Explorer, right-click on the project > Add > New Scaffolded Item.
  • Dans le volet gauche de la boîte de dialogue Ajouter une structure , sélectionnez identité > Ajouter.From the left pane of the Add Scaffold dialog, select Identity > Add.
  • Dans la boîte de dialogue Ajouter une identité , sélectionnez les options souhaitées.In the Add Identity dialog, select the options you want.
    • Sélectionnez votre page de disposition existante, ou votre fichier de disposition sera remplacé par un balisage incorrect.Select your existing layout page, or your layout file will be overwritten with incorrect markup. Lorsqu’un fichier _Layout. cshtml existant est sélectionné, il n’est pas remplacé.When an existing _Layout.cshtml file is selected, it is not overwritten.

Par exemple : ~/Pages/Shared/_Layout.cshtml pour Razor Pages ~/Views/Shared/_Layout.cshtml pour les projets MVCFor example: ~/Pages/Shared/_Layout.cshtml for Razor Pages ~/Views/Shared/_Layout.cshtml for MVC projects

  • Pour utiliser le contexte de données existant, sélectionnez au moins un fichier à substituer.To use your existing data context, select at least one file to override. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.You must select at least one file to add your data context.
    • Sélectionnez votre classe de contexte de données.Select your data context class.
    • Sélectionnez Ajouter .Select Add.
  • Pour créer un nouveau contexte utilisateur et éventuellement créer une classe d’utilisateur personnalisée pour l’identité :To create a new user context and possibly create a custom user class for Identity:
    • Sélectionnez le bouton + pour créer une classe de contexte de données.Select the + button to create a new Data context class.
    • Sélectionnez Ajouter .Select Add.

Remarque : Si vous créez un nouveau contexte utilisateur, vous n’êtes pas obligé de sélectionner un fichier à remplacer.Note: If you're creating a new user context, you don't have to select a file to override.

Supprimez le dossier pages/Shared et les fichiers de ce dossier.Delete the Pages/Shared folder and the files in that folder.

Créer une source d’interface utilisateur d’identité complèteCreate full identity UI source

Pour conserver le contrôle total de l’interface utilisateur de l’identité, exécutez le générateur de modèles d’identité et sélectionnez remplacer tous les fichiers.To maintain full control of the Identity UI, run the Identity scaffolder and select Override all files.

Le code en surbrillance suivant montre les modifications pour remplacer l’interface utilisateur d’identité par défaut par l’identité dans une application Web ASP.NET Core 2,1.The following highlighted code shows the changes to replace the default Identity UI with Identity in an ASP.NET Core 2.1 web app. Vous pouvez le faire pour avoir le contrôle total de l’interface utilisateur de l’identité.You might want to do this to have full control of the Identity UI.

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<IdentityUser, IdentityRole>()
        // services.AddDefaultIdentity<IdentityUser>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
        .AddRazorPagesOptions(options =>
        {
            options.AllowAreas = true;
            options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
            options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
        });

    services.ConfigureApplicationCookie(options =>
    {
        options.LoginPath = $"/Identity/Account/Login";
        options.LogoutPath = $"/Identity/Account/Logout";
        options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
    });

    // using Microsoft.AspNetCore.Identity.UI.Services;
    services.AddSingleton<IEmailSender, EmailSender>();
}

L’identité par défaut est remplacée dans le code suivant :The default Identity is replaced in the following code:

services.AddIdentity<IdentityUser, IdentityRole>()
    // services.AddDefaultIdentity<IdentityUser>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

Le code suivant définit les LoginPath, LogoutPathet AccessDeniedPath:The following code sets the LoginPath, LogoutPath, and AccessDeniedPath:

services.ConfigureApplicationCookie(options =>
{
    options.LoginPath = $"/Identity/Account/Login";
    options.LogoutPath = $"/Identity/Account/Logout";
    options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
});

Inscrire une implémentation de IEmailSender, par exemple :Register an IEmailSender implementation, for example:

// using Microsoft.AspNetCore.Identity.UI.Services;
services.AddSingleton<IEmailSender, EmailSender>();
public class EmailSender : IEmailSender
{
    public Task SendEmailAsync(string email, string subject, string message)
    {
        return Task.CompletedTask;
    }
}

Désactiver la page de RegistreDisable register page

Pour désactiver l’inscription des utilisateurs :To disable user registration:

  • Identité de l’échafaudage.Scaffold Identity. Incluez Account. Register, Account. Login et Account. RegisterConfirmation.Include Account.Register, Account.Login, and Account.RegisterConfirmation. Exemple :For example:

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Mettez à jour Areas/Identity/pages/Account/Register. cshtml. cs afin que les utilisateurs ne puissent pas s’inscrire à partir de ce point de terminaison :Update Areas/Identity/Pages/Account/Register.cshtml.cs so users can't register from this endpoint:

    public class RegisterModel : PageModel
    {
        public IActionResult OnGet()
        {
            return RedirectToPage("Login");
        }
    
        public IActionResult OnPost()
        {
            return RedirectToPage("Login");
        }
    }
    
  • Mettez à jour Areas/Identity/pages/Account/Register. cshtml pour qu’il soit cohérent avec les modifications précédentes :Update Areas/Identity/Pages/Account/Register.cshtml to be consistent with the preceding changes:

    @page
    @model RegisterModel
    @{
        ViewData["Title"] = "Go to Login";
    }
    
    <h1>@ViewData["Title"]</h1>
    
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a>
    </li>
    
  • Commentez ou supprimez le lien d’inscription de Areas/Identity/pages/Account/login. cshtmlComment out or remove the registration link from Areas/Identity/Pages/Account/Login.cshtml

@*
<p>
    <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
</p>
*@
  • Mettez à jour la page Areas/Identity/pages/Account/RegisterConfirmation .Update the Areas/Identity/Pages/Account/RegisterConfirmation page.

    • Supprimez le code et les liens du fichier cshtml.Remove the code and links from the cshtml file.
    • Supprimez le code de confirmation du PageModel:Remove the confirmation code from the PageModel:
    [AllowAnonymous]
      public class RegisterConfirmationModel : PageModel
      {
          public IActionResult OnGet()
          {  
              return Page();
          }
      }
    

Utiliser une autre application pour ajouter des utilisateursUse another app to add users

Fournissez un mécanisme pour ajouter des utilisateurs en dehors de l’application Web.Provide a mechanism to add users outside the web app. Les options permettant d’ajouter des utilisateurs sont les suivantes :Options to add users include:

  • Une application Web d’administration dédiée.A dedicated admin web app.
  • Application console.A console app.

Le code suivant décrit une approche de l’ajout d’utilisateurs :The following code outlines one approach to adding users:

  • Une liste d’utilisateurs est lue en mémoire.A list of users is read into memory.
  • Un mot de passe fort unique est généré pour chaque utilisateur.A strong unique password is generated for each user.
  • L’utilisateur est ajouté à la base de données d’identité.The user is added to the Identity database.
  • L’utilisateur est averti et a demandé à modifier le mot de passe.The user is notified and told to change the password.
public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();

        using (var scope = host.Services.CreateScope())
        {
            var services = scope.ServiceProvider;

            try
            {
                var context = services.GetRequiredService<AppDbCntx>();
                context.Database.Migrate();

                var config = host.Services.GetRequiredService<IConfiguration>();
                var userList = config.GetSection("userList").Get<List<string>>();

                SeedData.Initialize(services, userList).Wait();
            }
            catch (Exception ex)
            {
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "An error occurred adding users.");
            }
        }

        host.Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

L’exemple de code suivant présente l’ajout d’un utilisateur :The following code outlines adding a user:


public static async Task Initialize(IServiceProvider serviceProvider,
                                    List<string> userList)
{
    var userManager = serviceProvider.GetService<UserManager<IdentityUser>>();

    foreach (var userName in userList)
    {
        var userPassword = GenerateSecurePassword();
        var userId = await EnsureUser(userManager, userName, userPassword);

        NotifyUser(userName, userPassword);
    }
}

private static async Task<string> EnsureUser(UserManager<IdentityUser> userManager,
                                             string userName, string userPassword)
{
    var user = await userManager.FindByNameAsync(userName);

    if (user == null)
    {
        user = new IdentityUser(userName)
        {
            EmailConfirmed = true
        };
        await userManager.CreateAsync(user, userPassword);
    }

    return user.Id;
}

Une approche similaire peut être suivie pour les scénarios de production.A similar approach can be followed for production scenarios.

Ressources supplémentairesAdditional resources