Générer automatiquement des modèles d’Identity dans les projets ASP.NET Core

Par Rick Anderson

BlazorIdentityGénération de modèles automatique

La génération automatique de modèles ASP.NET Core Identity ajoute ASP.NET Core Identity à Blazor Web App et aux applications Blazor Server. Une fois que le générateur de modèles automatique ajoute les composants IdentityRazor à l’application, vous pouvez personnaliser les composants en fonction des besoins de votre application.

Bien que le générateur de modèles automatique génère le code C# nécessaire pour générer automatiquement la structure Identity dans l’application, vous devez mettre à jour la base de données du projet avec une migration de base de données Entity Framework (EF) Core pour terminer le processus. Cet article explique les étapes requises pour effectuer la migration d’une base de données.

Examinez les modifications après avoir exécuté le générateur de modèles d’Identity. Nous vous recommandons d’utiliser GitHub ou un autre système de contrôle de code source qui affiche les modifications de fichier avec une fonctionnalité de restauration des modifications.

Des services sont requis lors de l’utilisation de l’authentification à deux facteurs (2FA) , de la confirmation de compte et de la récupération de mot de passe, ainsi que d’autres fonctionnalités de sécurité avec Identity. Les services ou les stubs de service ne sont pas générés lors de la génération de modèles d’Identity automatique. Les services permettant d’activer ces fonctionnalités doivent être ajoutés manuellement.

Razor Pages et MVC :Identity génération automatique de modèles

ASP.NET Core fournit ASP.NET Core Identity en tant que bibliothèque de classes (RCL)Razor. Les applications qui incluent Identity peuvent appliquer le générateur de modèles automatique de manière sélective pour ajouter le code source contenu dans la RCL Identity. Vous pouvez souhaiter générer le code source afin de pouvoir modifier le code et changer le comportement. Par exemple, vous pouvez demander au générateur de modèles automatique de générer le code utilisé dans l’inscription. Le code personnalisé Identity remplace l’implémentation par défaut fournie par la RCL Identity. Pour obtenir le contrôle total de l’interface utilisateur et ne pas utiliser la RCL par défaut, consultez la section Créer une source d’interface utilisateur Identity complète.

Les applications qui n’incluent pas l’authentification peuvent appliquer le générateur de modèles automatique pour ajouter le package RCL d’Identity. Vous pouvez sélectionner le code de Identity à générer.

Bien que le générateur de modèles génère la majeure partie du code nécessaire, vous devez mettre à jour votre projet pour terminer le processus. Ce document explique les étapes nécessaires pour effectuer une mise à jour de la génération de modèles d’Identity automatique.

Nous vous recommandons d’utiliser un système de contrôle de code source qui affiche les différences de fichiers et vous permet de revenir sur les modifications. Examinez les modifications après avoir exécuté le générateur de modèles d’Identity.

Des services sont requis lors de l’utilisation de l’authentification à deux facteurs, de la confirmation de compte et de la récupération de mot de passe, ainsi que d’autres fonctionnalités de sécurité avec Identity. Les services ou les stubs de service ne sont pas générés lors de la génération de modèles d’Identity automatique. Les services permettant d’activer ces fonctionnalités doivent être ajoutés manuellement. Par exemple, consultez Exiger un e-mail de confirmation.

En règle générale, les applications créées avec des comptes individuels ne doivent pas créer un nouveau contexte de données.

Générer automatiquement des modèles Identity dans un projet Blazor

Cette section s’applique aux Blazor Web App et aux applications Blazor Server.

Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Blazor Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter IdentityBlazor :
    • Sélectionnez ou ajoutez avec le bouton plus (+) la classe de contexte de base de données (classe DbContext).
    • Sélectionnez le fournisseur de base de données (fournisseur de base de données), qui est défini par défaut sur SQL Server.
    • Sélectionnez ou ajoutez avec le bouton plus (+) la classe utilisateur (classe Utilisateur).
    • Cliquez sur le bouton Ajouter.

Le code de base de données généré Identity nécessite des migrations EF Core. Les étapes suivantes expliquent comment créer et appliquer une migration à la base de données.

Les services connectés Visual Studio sont utilisées pour ajouter une migration EF Core et mettre à jour la base de données.

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des Dépendances de service, sélectionnez les points de suspension (...) suivis Ajouter la migration.

Donnez à la migration un nom de migration tel que CreateIdentitySchema, qui est un nom qui décrit la migration. Attendez que le contexte de base de données soit chargé dans le champ noms de classes de DbContext, ce qui peut prendre quelques secondes. Sélectionnez Terminer pour créer la migration.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Sélectionnez à nouveau les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

La commande de base de données de mise à jour exécute les Up migrations de méthode qui n’ont pas été appliquées dans un fichier de code de migration créé par le générateur de modèles automatique. Dans ce cas, la commande exécute la méthode Up dans le fichier Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, qui crée les Identity tables, les contraintes et les index. L’espace réservé {TIME STAMP} est un horodatage et l’espace réservé {MIGRATION NAME} est le nom de la migration.

Applications Blazor côté client (autonome Blazor WebAssembly)

Les applications Blazor côté client (Blazor WebAssembly autonome) utilisent leurs propres approches d’interface utilisateur de Identity et ne peuvent pas utiliser la génération automatique de modèles ASP.NET Core Identity.

Pour plus d’informations, consultez les articles Sécurité Blazor et Identity.

Générer automatiquement un modèle d’Identity dans un projet Razor sans autorisation existante

Installez le package NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Remarque

Pour obtenir des conseils sur l’ajout de packages à des applications .NET, consultez les articles figurant sous Installer et gérer des packages dans Flux de travail de la consommation des packages (documentation NuGet). Vérifiez les versions du package sur NuGet.org.


Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Migrations, UseAuthentication et disposition

Le code de base de données Identity généré nécessite des Entity Framework (EF) Core Migrations. Si une migration pour générer le schéma Identity n’a pas été créée et appliquée à la base de données, créez une migration et mettez à jour la base de données.

Les services connectés Visual Studio sont utilisées pour ajouter une migration EF Core et mettre à jour la base de données.

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des Dépendances de service, sélectionnez les points de suspension (...) suivis Ajouter la migration.

Donnez à la migration un nom de migration tel que CreateIdentitySchema, qui est un nom qui décrit la migration. Attendez que le contexte de base de données soit chargé dans le champ noms de classes de DbContext, ce qui peut prendre quelques secondes. Sélectionnez Terminer pour créer la migration.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Sélectionnez à nouveau les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

La commande de base de données de mise à jour exécute les Up migrations de méthode qui n’ont pas été appliquées dans un fichier de code de migration créé par le générateur de modèles automatique. Dans ce cas, la commande exécute la méthode Up dans le fichier Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, qui crée les Identity tables, les contraintes et les index. L’espace réservé {TIME STAMP} est un horodatage et l’espace réservé {MIGRATION NAME} est le nom de la migration.

Si le schéma d’Identity a déjà été créé mais n’a pas été appliqué à la base de données, seule la commande de mise à jour de la base de données doit être exécutée :

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des dépendances de service, sélectionnez les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Vous pouvez confirmer l’application d’un schéma d’Identity avec la commande suivante. La sortie de la commande inclut une colonne « applied » pour afficher les migrations appliquées à la base de données.

Dans la console du Gestionnaire de package Visual Studio, exécutez Get-Migration:

Get-Migration

S’il existe plusieurs contextes de base de données, spécifiez le contexte avec le paramètre -Context.

Modifications de disposition

Facultatif : ajoutez la connexion partielle (_LoginPartial) au fichier de disposition :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
    <link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial" />
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

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

Générer un modèle d’Identity dans un projet Razor avec autorisation

Installez le package NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Remarque

Pour obtenir des conseils sur l’ajout de packages à des applications .NET, consultez les articles figurant sous Installer et gérer des packages dans Flux de travail de la consommation des packages (documentation NuGet). Vérifiez les versions du package sur NuGet.org.


Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Générer un modèle d’Identity dans un projet MVC sans autorisation existante

Installez le package NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Remarque

Pour obtenir des conseils sur l’ajout de packages à des applications .NET, consultez les articles figurant sous Installer et gérer des packages dans Flux de travail de la consommation des packages (documentation NuGet). Vérifiez les versions du package sur NuGet.org.


Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Facultatif : ajoutez la connexion partielle (_LoginPartial) au fichier Views/Shared/_Layout.cshtml :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
    <link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial" />
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

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

Le code de base de données Identity généré nécessite des Entity Framework (EF) Core Migrations. Si une migration pour générer le schéma Identity n’a pas été créée et appliquée à la base de données, créez une migration et mettez à jour la base de données.

Les services connectés Visual Studio sont utilisées pour ajouter une migration EF Core et mettre à jour la base de données.

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des Dépendances de service, sélectionnez les points de suspension (...) suivis Ajouter la migration.

Donnez à la migration un nom de migration tel que CreateIdentitySchema, qui est un nom qui décrit la migration. Attendez que le contexte de base de données soit chargé dans le champ noms de classes de DbContext, ce qui peut prendre quelques secondes. Sélectionnez Terminer pour créer la migration.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Sélectionnez à nouveau les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

La commande de base de données de mise à jour exécute les Up migrations de méthode qui n’ont pas été appliquées dans un fichier de code de migration créé par le générateur de modèles automatique. Dans ce cas, la commande exécute la méthode Up dans le fichier Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, qui crée les Identity tables, les contraintes et les index. L’espace réservé {TIME STAMP} est un horodatage et l’espace réservé {MIGRATION NAME} est le nom de la migration.

Si le schéma d’Identity a déjà été créé mais n’a pas été appliqué à la base de données, seule la commande de mise à jour de la base de données doit être exécutée :

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des dépendances de service, sélectionnez les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Vous pouvez confirmer l’application d’un schéma d’Identity avec la commande suivante. La sortie de la commande inclut une colonne « applied » pour afficher les migrations appliquées à la base de données.

Dans la console du Gestionnaire de package Visual Studio, exécutez Get-Migration:

Get-Migration

S’il existe plusieurs contextes de base de données, spécifiez le contexte avec le paramètre -Context.

Ajoutez MapRazorPages à Program.cs, comme indiqué dans le code en surbrillance suivant :

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebMVCauth.Data;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddControllersWithViews();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseMigrationsEndPoint();
}
else
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

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

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();

app.Run();

Générer un modèle d’Identity dans un projet MVC avec autorisation

Installez le package NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Remarque

Pour obtenir des conseils sur l’ajout de packages à des applications .NET, consultez les articles figurant sous Installer et gérer des packages dans Flux de travail de la consommation des packages (documentation NuGet). Vérifiez les versions du package sur NuGet.org.


Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Créer une source d’interface utilisateur d’Identity complète

Pour conserver un contrôle total de l’interface utilisateur d’Identity, exécutez le générateur de modèles d’Identity automatique et sélectionnez Remplacer tous les fichiers.

Configuration du mot de passe

Si PasswordOptions est configuré dans Startup.ConfigureServices, la configuration de l’attribut [StringLength] peut être requise pour la propriété Password dans les pages d’Identity générées automatiquement. Les propriétés InputModelPassword se trouvent dans les fichiers suivants :

  • Areas/Identity/Pages/Account/Register.cshtml.cs
  • Areas/Identity/Pages/Account/ResetPassword.cshtml.cs

Désactiver une page

Cette section montre comment désactiver la page d’inscription, mais l’approche peut être utilisée pour désactiver n’importe quelle page.

Pour désactiver l’inscription utilisateur :

  • Générez automatiquement des modèles d’Identity. Incluez Account.Register, Account.Login et Account.RegisterConfirmation. Par exemple :

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Mettez à jour Areas/Identity/Pages/Account/Register.cshtml.cs pour que les utilisateurs ne puissent pas s’inscrire à partir de ce point de terminaison :

    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 être cohérent avec les modifications précédentes :

    @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>
    
  • Mettez en commentaires ou supprimez le lien d’inscription à partir de 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.

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

Utiliser une autre application pour ajouter des utilisateurs

Fournissez un mécanisme pour ajouter des utilisateurs en dehors de l’application web. Les options d’ajout d’utilisateurs sont les suivantes :

  • Une application web d’administration dédiée.
  • Une application console.

Le code suivant décrit une approche pour ajouter des utilisateurs :

  • Une liste d’utilisateurs est lue en mémoire.
  • Un mot de passe unique fort est généré pour chaque utilisateur.
  • L’utilisateur est ajouté à la base de données d’Identity.
  • L’utilisateur est averti et invité à modifier le mot de passe.
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>();
            });
}

Le code suivant décrit l’ajout d’un utilisateur :


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.

Empêcher la publication de ressources statiques d’Identity

Pour empêcher la publication de ressources statiques d’Identity sur la racine web, consultez Présentation d’Identity sur ASP.NET Core.

ASP.NET Core fournit ASP.NET Core Identity en tant que bibliothèque de classes (RCL)Razor. Les applications qui incluent Identity peuvent appliquer le générateur de modèles automatique de manière sélective pour ajouter le code source contenu dans la RCL Identity. Vous pouvez souhaiter générer le code source afin de pouvoir modifier le code et changer le comportement. Par exemple, vous pouvez demander au générateur de modèles automatique de générer le code utilisé dans l’inscription. Le code généré est prioritaire sur le même code dans la bibliothèque de classes Identityd’identité. Pour obtenir le contrôle total de l’interface utilisateur et ne pas utiliser la RCL par défaut, consultez la section Créer une source d’interface utilisateur d’Identity complète.

Les applications qui n’incluent pas l’authentification peuvent appliquer le générateur de modèles automatique pour ajouter le package RCL d’Identity. Vous pouvez sélectionner le code de Identity à générer.

Bien que le générateur de modèles génère la majeure partie du code nécessaire, vous devez mettre à jour votre projet pour terminer le processus. Ce document explique les étapes nécessaires pour effectuer une mise à jour de la génération de modèles d’Identity automatique.

Nous vous recommandons d’utiliser un système de contrôle de code source qui affiche les différences de fichiers et vous permet de revenir sur les modifications. Examinez les modifications après avoir exécuté le générateur de modèles d’Identity.

Des services sont requis lors de l’utilisation de l’authentification à deux facteurs, de la confirmation de compte et de la récupération de mot de passe, ainsi que d’autres fonctionnalités de sécurité avec Identity. Les services ou les stubs de service ne sont pas générés lors de la génération de modèles d’Identity automatique. Les services permettant d’activer ces fonctionnalités doivent être ajoutés manuellement. Par exemple, consultez Exiger un e-mail de confirmation.

En règle générale, les applications créées avec des comptes individuels ne doivent pas créer un nouveau contexte de données.

Générer automatiquement un modèle d’Identity dans un projet Razor sans autorisation existante

Installez le package NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Remarque

Pour obtenir des conseils sur l’ajout de packages à des applications .NET, consultez les articles figurant sous Installer et gérer des packages dans Flux de travail de la consommation des packages (documentation NuGet). Vérifiez les versions du package sur NuGet.org.


Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Migrations, UseAuthentication et disposition

Le code de base de données Identity généré nécessite des Entity Framework (EF) Core Migrations. Si une migration pour générer le schéma Identity n’a pas été créée et appliquée à la base de données, créez une migration et mettez à jour la base de données.

Les services connectés Visual Studio sont utilisées pour ajouter une migration EF Core et mettre à jour la base de données.

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des Dépendances de service, sélectionnez les points de suspension (...) suivis Ajouter la migration.

Donnez à la migration un nom de migration tel que CreateIdentitySchema, qui est un nom qui décrit la migration. Attendez que le contexte de base de données soit chargé dans le champ noms de classes de DbContext, ce qui peut prendre quelques secondes. Sélectionnez Terminer pour créer la migration.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Sélectionnez à nouveau les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

La commande de base de données de mise à jour exécute les Up migrations de méthode qui n’ont pas été appliquées dans un fichier de code de migration créé par le générateur de modèles automatique. Dans ce cas, la commande exécute la méthode Up dans le fichier Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, qui crée les Identity tables, les contraintes et les index. L’espace réservé {TIME STAMP} est un horodatage et l’espace réservé {MIGRATION NAME} est le nom de la migration.

Si le schéma d’Identity a déjà été créé mais n’a pas été appliqué à la base de données, seule la commande de mise à jour de la base de données doit être exécutée :

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des dépendances de service, sélectionnez les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Vous pouvez confirmer l’application d’un schéma d’Identity avec la commande suivante. La sortie de la commande inclut une colonne « applied » pour afficher les migrations appliquées à la base de données.

Dans la console du Gestionnaire de package Visual Studio, exécutez Get-Migration:

Get-Migration

S’il existe plusieurs contextes de base de données, spécifiez le contexte avec le paramètre -Context.

Modifications de disposition

Facultatif : ajoutez la connexion partielle (_LoginPartial) au fichier de disposition :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
    <link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial" />
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

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

Générer un modèle d’Identity dans un projet Razor avec autorisation

Installez le package NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Remarque

Pour obtenir des conseils sur l’ajout de packages à des applications .NET, consultez les articles figurant sous Installer et gérer des packages dans Flux de travail de la consommation des packages (documentation NuGet). Vérifiez les versions du package sur NuGet.org.


Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Générer un modèle d’Identity dans un projet MVC sans autorisation existante

Installez le package NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Remarque

Pour obtenir des conseils sur l’ajout de packages à des applications .NET, consultez les articles figurant sous Installer et gérer des packages dans Flux de travail de la consommation des packages (documentation NuGet). Vérifiez les versions du package sur NuGet.org.


Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Facultatif : ajoutez la connexion partielle (_LoginPartial) au fichier Views/Shared/_Layout.cshtml :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
    <link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial" />
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

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

Le code de base de données Identity généré nécessite des Entity Framework (EF) Core Migrations. Si une migration pour générer le schéma Identity n’a pas été créée et appliquée à la base de données, créez une migration et mettez à jour la base de données.

Les services connectés Visual Studio sont utilisées pour ajouter une migration EF Core et mettre à jour la base de données.

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des Dépendances de service, sélectionnez les points de suspension (...) suivis Ajouter la migration.

Donnez à la migration un nom de migration tel que CreateIdentitySchema, qui est un nom qui décrit la migration. Attendez que le contexte de base de données soit chargé dans le champ noms de classes de DbContext, ce qui peut prendre quelques secondes. Sélectionnez Terminer pour créer la migration.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Sélectionnez à nouveau les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

La commande de base de données de mise à jour exécute les Up migrations de méthode qui n’ont pas été appliquées dans un fichier de code de migration créé par le générateur de modèles automatique. Dans ce cas, la commande exécute la méthode Up dans le fichier Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, qui crée les Identity tables, les contraintes et les index. L’espace réservé {TIME STAMP} est un horodatage et l’espace réservé {MIGRATION NAME} est le nom de la migration.

Si le schéma d’Identity a déjà été créé mais n’a pas été appliqué à la base de données, seule la commande de mise à jour de la base de données doit être exécutée :

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des dépendances de service, sélectionnez les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Vous pouvez confirmer l’application d’un schéma d’Identity avec la commande suivante. La sortie de la commande inclut une colonne « applied » pour afficher les migrations appliquées à la base de données.

Dans la console du Gestionnaire de package Visual Studio, exécutez Get-Migration:

Get-Migration

S’il existe plusieurs contextes de base de données, spécifiez le contexte avec le paramètre -Context.

Ajoutez MapRazorPages à Program.cs, comme indiqué dans le code en surbrillance suivant :

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebMVCauth.Data;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddControllersWithViews();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseMigrationsEndPoint();
}
else
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

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

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();

app.Run();

Générer un modèle d’Identity dans un projet MVC avec autorisation

Installez le package NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Remarque

Pour obtenir des conseils sur l’ajout de packages à des applications .NET, consultez les articles figurant sous Installer et gérer des packages dans Flux de travail de la consommation des packages (documentation NuGet). Vérifiez les versions du package sur NuGet.org.


Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Structurer Identity dans une application Blazor côté serveur avec autorisation

Installez le package NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Remarque

Pour obtenir des conseils sur l’ajout de packages à des applications .NET, consultez les articles figurant sous Installer et gérer des packages dans Flux de travail de la consommation des packages (documentation NuGet). Vérifiez les versions du package sur NuGet.org.


Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Migrations

Le code de base de données Identity généré nécessite des Entity Framework (EF) Core Migrations. Si une migration pour générer le schéma Identity n’a pas été créée et appliquée à la base de données, créez une migration et mettez à jour la base de données.

Les services connectés Visual Studio sont utilisées pour ajouter une migration EF Core et mettre à jour la base de données.

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des Dépendances de service, sélectionnez les points de suspension (...) suivis Ajouter la migration.

Donnez à la migration un nom de migration tel que CreateIdentitySchema, qui est un nom qui décrit la migration. Attendez que le contexte de base de données soit chargé dans le champ noms de classes de DbContext, ce qui peut prendre quelques secondes. Sélectionnez Terminer pour créer la migration.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Sélectionnez à nouveau les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

La commande de base de données de mise à jour exécute les Up migrations de méthode qui n’ont pas été appliquées dans un fichier de code de migration créé par le générateur de modèles automatique. Dans ce cas, la commande exécute la méthode Up dans le fichier Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, qui crée les Identity tables, les contraintes et les index. L’espace réservé {TIME STAMP} est un horodatage et l’espace réservé {MIGRATION NAME} est le nom de la migration.

Si le schéma d’Identity a déjà été créé mais n’a pas été appliqué à la base de données, seule la commande de mise à jour de la base de données doit être exécutée :

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des dépendances de service, sélectionnez les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Vous pouvez confirmer l’application d’un schéma d’Identity avec la commande suivante. La sortie de la commande inclut une colonne « applied » pour afficher les migrations appliquées à la base de données.

Dans la console du Gestionnaire de package Visual Studio, exécutez Get-Migration:

Get-Migration

S’il existe plusieurs contextes de base de données, spécifiez le contexte avec le paramètre -Context.

Styliser les points de terminaison d’authentification

Étant donné que Blazor utilise des pages RazorPagesIdentity, le style de l’interface utilisateur change lorsqu’un visiteur navigue entre les pages Identity et les composants. Vous disposez de deux options pour traiter les styles incongrus :

Composants d’Identity personnalisés

ASP.NET Core Identity est conçue pour fonctionner dans le contexte de la communication des requêtes et des réponses HTTP, qui n’est généralement pas le modèle de communication client-serveur principal de l’application Blazor. Les applications ASP.NET Core qui utilisent ASP.NET Core Identity pour la gestion des utilisateurs doivent utiliser Razor Pages plutôt que les composants Razor pour l’interface utilisateur en rapport avec Identity, notamment pour l’inscription des utilisateurs, la connexion, la déconnexion et d’autres tâches de gestion des utilisateurs.

Étant donné que SignInManager<TUser> et UserManager<TUser> ne sont pas pris en charge dans les composants Razor, nous vous recommandons d’utiliser l’API web pour gérer les actions d’Identity des composants Razor via une application ASP.NET Core avec Identity activée côté serveur. Pour obtenir des conseils sur la création d’API web pour les applications Blazor, consultez Appeler une API web à partir d’une application ASP.NET Core Blazor.

Une approche de l’utilisation de composants Razor pour Identity au lieu de pages Razor consiste à créer vos propres composants personnalisés d’IdentityRazor, mais Microsoft ne recommande pas ou ne prend pas en charge cette approche. Pour plus de contexte, explorez les discussions suivantes. Dans les discussions suivantes, les exemples de code dans les commentaires de problème et les exemples de code liés entre eux dans les référentiels GitHub non Microsoft ne sont pas pris en charge par Microsoft, mais peuvent être utiles à certains développeurs :

Pour obtenir une assistance supplémentaire lors de la recherche de composants d’IdentityRazor personnalisés ou de composants Razor tiers, nous vous recommandons les ressources suivantes :

Utiliser une disposition personnalisée avec des styles d’application Blazor

La disposition et les styles des pages d’Identity peuvent être modifiés pour produire des pages qui utilisent des styles similaires au thème Blazor par défaut. Cette approche n’est pas couverte par la documentation.

Applications Blazor côté client

Les applications Blazor côté client utilisent leurs propres approches d’interface utilisateur d’Identity et ne peuvent pas utiliser la génération de modèles d’Identity automatique d’ASP.NET Core. Les applications ASP.NET Core côté serveur de solutions Blazor hébergées peuvent suivre les instructions Razor Pages/MVC de cet article et sont configurées comme n’importe quel autre type d’application ASP.NET Core qui prend en charge Identity.

L’infrastructure Blazor n’inclut pas les versions des composants Razor des pages de l’interface utilisateur d’Identity. Les composants de l’interface utilisateur d’IdentityRazor peuvent être générés sur mesure ou obtenus à partir de sources tierces non prises en charge.

Pour plus d’informations, consultez les articles Sécurité Blazor et Identity.

Créer une source d’interface utilisateur d’Identity complète

Pour conserver un contrôle total de l’interface utilisateur d’Identity, exécutez le générateur de modèles d’Identity automatique et sélectionnez Remplacer tous les fichiers.

Configuration du mot de passe

Si PasswordOptions est configuré dans Startup.ConfigureServices, la configuration de l’attribut [StringLength] peut être requise pour la propriété Password dans les pages d’Identity générées automatiquement. Les propriétés InputModelPassword se trouvent dans les fichiers suivants :

  • Areas/Identity/Pages/Account/Register.cshtml.cs
  • Areas/Identity/Pages/Account/ResetPassword.cshtml.cs

Désactiver une page

Cette section montre comment désactiver la page d’inscription, mais l’approche peut être utilisée pour désactiver n’importe quelle page.

Pour désactiver l’inscription utilisateur :

  • Générez automatiquement des modèles d’Identity. Incluez Account.Register, Account.Login et Account.RegisterConfirmation. Par exemple :

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Mettez à jour Areas/Identity/Pages/Account/Register.cshtml.cs pour que les utilisateurs ne puissent pas s’inscrire à partir de ce point de terminaison :

    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 être cohérent avec les modifications précédentes :

    @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>
    
  • Mettez en commentaires ou supprimez le lien d’inscription à partir de 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.

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

Utiliser une autre application pour ajouter des utilisateurs

Fournissez un mécanisme pour ajouter des utilisateurs en dehors de l’application web. Les options d’ajout d’utilisateurs sont les suivantes :

  • Une application web d’administration dédiée.
  • Une application console.

Le code suivant décrit une approche pour ajouter des utilisateurs :

  • Une liste d’utilisateurs est lue en mémoire.
  • Un mot de passe unique fort est généré pour chaque utilisateur.
  • L’utilisateur est ajouté à la base de données d’Identity.
  • L’utilisateur est averti et invité à modifier le mot de passe.
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>();
            });
}

Le code suivant décrit l’ajout d’un utilisateur :


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.

Empêcher la publication de ressources statiques d’Identity

Pour empêcher la publication de ressources statiques d’Identity sur la racine web, consultez Présentation d’Identity sur ASP.NET Core.

ASP.NET Core fournit ASP.NET Core Identity en tant que bibliothèque de classes (RCL)Razor. Les applications qui incluent Identity peuvent appliquer le générateur de modèles automatique de manière sélective pour ajouter le code source contenu dans la RCL Identity. Vous pouvez souhaiter générer le code source afin de pouvoir modifier le code et changer le comportement. Par exemple, vous pouvez demander au générateur de modèles automatique de générer le code utilisé dans l’inscription. Le code généré est prioritaire sur le même code dans la bibliothèque de classes Identityd’identité. Pour obtenir le contrôle total de l’interface utilisateur et ne pas utiliser la RCL par défaut, consultez la section Créer une source d’interface utilisateur d’Identity complète.

Les applications qui n’incluent pas l’authentification peuvent appliquer le générateur de modèles automatique pour ajouter le package RCL d’Identity. Vous pouvez sélectionner le code de Identity à générer.

Bien que le générateur de modèles génère la majeure partie du code nécessaire, vous devez mettre à jour votre projet pour terminer le processus. Ce document explique les étapes nécessaires pour effectuer une mise à jour de la génération de modèles d’Identity automatique.

Nous vous recommandons d’utiliser un système de contrôle de code source qui affiche les différences de fichiers et vous permet de revenir sur les modifications. Examinez les modifications après avoir exécuté le générateur de modèles d’Identity.

Des services sont requis lors de l’utilisation de l’authentification à deux facteurs, de la confirmation de compte et de la récupération de mot de passe, ainsi que d’autres fonctionnalités de sécurité avec Identity. Les services ou les stubs de service ne sont pas générés lors de la génération de modèles d’Identity automatique. Les services permettant d’activer ces fonctionnalités doivent être ajoutés manuellement. Par exemple, consultez Exiger un e-mail de confirmation.

Lors de la génération automatique de modèles de Identity avec un nouveau contexte de données dans un projet avec des comptes individuels existants, ouvrez Startup.ConfigureServices et supprimez les appels à :

  • AddDbContext
  • AddDefaultIdentity

Par exemple, AddDbContext et AddDefaultIdentity sont mis en commentaires dans le code suivant :

public void ConfigureServices(IServiceCollection services)
{
    //services.AddDbContext<ApplicationDbContext>(options =>
    //    options.UseSqlServer(
    //        Configuration.GetConnectionString("DefaultConnection")));
    //services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    //    .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddControllersWithViews();
    services.AddRazorPages();
}

Le code précédent met en commentaires le code qui est dupliqué dans Areas/Identity/IdentityHostingStartup.cs

En règle générale, les applications créées avec des comptes individuels ne doivent pas créer un nouveau contexte de données.

Générer automatiquement des modèles d’Identity dans un projet vide

Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Mettez à jour la classe Startup avec un code similaire à ce qui suit :

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

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
        services.AddRazorPages();
    }

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

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
            endpoints.MapRazorPages();
        });
    }
}

La commande UseHsts est recommandée, mais pas obligatoire. Pour plus d’informations, consultez Protocole HSTS (HTTP Strict Transport Security).

Le code de base de données Identity généré nécessite des Entity Framework (EF) Core Migrations. Si une migration pour générer le schéma Identity n’a pas été créée et appliquée à la base de données, créez une migration et mettez à jour la base de données.

Les services connectés Visual Studio sont utilisées pour ajouter une migration EF Core et mettre à jour la base de données.

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des Dépendances de service, sélectionnez les points de suspension (...) suivis Ajouter la migration.

Donnez à la migration un nom de migration tel que CreateIdentitySchema, qui est un nom qui décrit la migration. Attendez que le contexte de base de données soit chargé dans le champ noms de classes de DbContext, ce qui peut prendre quelques secondes. Sélectionnez Terminer pour créer la migration.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Sélectionnez à nouveau les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

La commande de base de données de mise à jour exécute les Up migrations de méthode qui n’ont pas été appliquées dans un fichier de code de migration créé par le générateur de modèles automatique. Dans ce cas, la commande exécute la méthode Up dans le fichier Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, qui crée les Identity tables, les contraintes et les index. L’espace réservé {TIME STAMP} est un horodatage et l’espace réservé {MIGRATION NAME} est le nom de la migration.

Si le schéma d’Identity a déjà été créé mais n’a pas été appliqué à la base de données, seule la commande de mise à jour de la base de données doit être exécutée :

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des dépendances de service, sélectionnez les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Vous pouvez confirmer l’application d’un schéma d’Identity avec la commande suivante. La sortie de la commande inclut une colonne « applied » pour afficher les migrations appliquées à la base de données.

Dans la console du Gestionnaire de package Visual Studio, exécutez Get-Migration:

Get-Migration

S’il existe plusieurs contextes de base de données, spécifiez le contexte avec le paramètre -Context.

Générer un modèle d’Identity dans un projet Razor sans autorisation existante

Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Identity est configuré dans Areas/Identity/IdentityHostingStartup.cs. Pour plus d’informations, consultez IHostingStartup.

Migrations, UseAuthentication et disposition

Le code de base de données Identity généré nécessite des Entity Framework (EF) Core Migrations. Si une migration pour générer le schéma Identity n’a pas été créée et appliquée à la base de données, créez une migration et mettez à jour la base de données.

Les services connectés Visual Studio sont utilisées pour ajouter une migration EF Core et mettre à jour la base de données.

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des Dépendances de service, sélectionnez les points de suspension (...) suivis Ajouter la migration.

Donnez à la migration un nom de migration tel que CreateIdentitySchema, qui est un nom qui décrit la migration. Attendez que le contexte de base de données soit chargé dans le champ noms de classes de DbContext, ce qui peut prendre quelques secondes. Sélectionnez Terminer pour créer la migration.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Sélectionnez à nouveau les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

La commande de base de données de mise à jour exécute les Up migrations de méthode qui n’ont pas été appliquées dans un fichier de code de migration créé par le générateur de modèles automatique. Dans ce cas, la commande exécute la méthode Up dans le fichier Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, qui crée les Identity tables, les contraintes et les index. L’espace réservé {TIME STAMP} est un horodatage et l’espace réservé {MIGRATION NAME} est le nom de la migration.

Si le schéma d’Identity a déjà été créé mais n’a pas été appliqué à la base de données, seule la commande de mise à jour de la base de données doit être exécutée :

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des dépendances de service, sélectionnez les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Vous pouvez confirmer l’application d’un schéma d’Identity avec la commande suivante. La sortie de la commande inclut une colonne « applied » pour afficher les migrations appliquées à la base de données.

Dans la console du Gestionnaire de package Visual Studio, exécutez Get-Migration:

Get-Migration

S’il existe plusieurs contextes de base de données, spécifiez le contexte avec le paramètre -Context.

Activer l’authentification

Mettez à jour la classe Startup avec un code similaire à ce qui suit :

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

    public IConfiguration Configuration { get; }

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

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

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

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
        });
    }
}

La commande UseHsts est recommandée, mais pas obligatoire. Pour plus d’informations, consultez Protocole HSTS (HTTP Strict Transport Security).

Modifications de disposition

Facultatif : ajoutez la connexion partielle (_LoginPartial) au fichier de disposition :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRP</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRP</a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
                    <partial name="_LoginPartial" />
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2019 - WebRP - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

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

Générer un modèle d’Identity dans un projet Razor avec autorisation

Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Certaines options d’Identity sont configurées dans Areas/Identity/IdentityHostingStartup.cs. Pour plus d’informations, consultez IHostingStartup.

Générer un modèle d’Identity dans un projet MVC sans autorisation existante

Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Facultatif : ajoutez la connexion partielle (_LoginPartial) au fichier Views/Shared/_Layout.cshtml :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRP</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRP</a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
                    <partial name="_LoginPartial" />
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2019 - WebRP - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

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

Déplacez le fichier Pages/Shared/_LoginPartial.cshtml vers Views/Shared/_LoginPartial.cshtml.

Identity est configuré dans Areas/Identity/IdentityHostingStartup.cs. Pour plus d’informations, consultez IHostingStartup.

Le code de base de données Identity généré nécessite des Entity Framework (EF) Core Migrations. Si une migration pour générer le schéma Identity n’a pas été créée et appliquée à la base de données, créez une migration et mettez à jour la base de données.

Les services connectés Visual Studio sont utilisées pour ajouter une migration EF Core et mettre à jour la base de données.

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des Dépendances de service, sélectionnez les points de suspension (...) suivis Ajouter la migration.

Donnez à la migration un nom de migration tel que CreateIdentitySchema, qui est un nom qui décrit la migration. Attendez que le contexte de base de données soit chargé dans le champ noms de classes de DbContext, ce qui peut prendre quelques secondes. Sélectionnez Terminer pour créer la migration.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Sélectionnez à nouveau les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

La commande de base de données de mise à jour exécute les Up migrations de méthode qui n’ont pas été appliquées dans un fichier de code de migration créé par le générateur de modèles automatique. Dans ce cas, la commande exécute la méthode Up dans le fichier Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, qui crée les Identity tables, les contraintes et les index. L’espace réservé {TIME STAMP} est un horodatage et l’espace réservé {MIGRATION NAME} est le nom de la migration.

Si le schéma d’Identity a déjà été créé mais n’a pas été appliqué à la base de données, seule la commande de mise à jour de la base de données doit être exécutée :

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des dépendances de service, sélectionnez les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Vous pouvez confirmer l’application d’un schéma d’Identity avec la commande suivante. La sortie de la commande inclut une colonne « applied » pour afficher les migrations appliquées à la base de données.

Dans la console du Gestionnaire de package Visual Studio, exécutez Get-Migration:

Get-Migration

S’il existe plusieurs contextes de base de données, spécifiez le contexte avec le paramètre -Context.

Mettez à jour la classe Startup avec un code similaire à ce qui suit :

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

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
        services.AddRazorPages();
    }

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

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
            endpoints.MapRazorPages();
        });
    }
}

La commande UseHsts est recommandée, mais pas obligatoire. Pour plus d’informations, consultez Protocole HSTS (HTTP Strict Transport Security).

Générer un modèle d’Identity dans un projet MVC avec autorisation

Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Structurer Identity dans une application Blazor côté serveur sans autorisation existante

Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Identity est configuré dans Areas/Identity/IdentityHostingStartup.cs. Pour plus d’informations, consultez IHostingStartup.

Migrations

Le code de base de données Identity généré nécessite des Entity Framework (EF) Core Migrations. Si une migration pour générer le schéma Identity n’a pas été créée et appliquée à la base de données, créez une migration et mettez à jour la base de données.

Les services connectés Visual Studio sont utilisées pour ajouter une migration EF Core et mettre à jour la base de données.

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des Dépendances de service, sélectionnez les points de suspension (...) suivis Ajouter la migration.

Donnez à la migration un nom de migration tel que CreateIdentitySchema, qui est un nom qui décrit la migration. Attendez que le contexte de base de données soit chargé dans le champ noms de classes de DbContext, ce qui peut prendre quelques secondes. Sélectionnez Terminer pour créer la migration.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Sélectionnez à nouveau les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

La commande de base de données de mise à jour exécute les Up migrations de méthode qui n’ont pas été appliquées dans un fichier de code de migration créé par le générateur de modèles automatique. Dans ce cas, la commande exécute la méthode Up dans le fichier Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, qui crée les Identity tables, les contraintes et les index. L’espace réservé {TIME STAMP} est un horodatage et l’espace réservé {MIGRATION NAME} est le nom de la migration.

Si le schéma d’Identity a déjà été créé mais n’a pas été appliqué à la base de données, seule la commande de mise à jour de la base de données doit être exécutée :

Dans Explorateur de solutions, double-cliquez sur Services connectés. Dans la zone Base de données locale SQL Server Express des dépendances de service, sélectionnez les points de suspension (...) suivis de la commande Mettre à jour la base de données.

La boîte de dialogue Mise à jour de la base de données avec la dernière migration s’ouvre. Attendez que le champs noms de classes DbContext soit mis à jour et que les migrations antérieures soient chargées, ce qui peut prendre quelques secondes. Sélectionnez le bouton Terminer.

Sélectionnez le bouton Fermer une fois l’opération terminée.

Vous pouvez confirmer l’application d’un schéma d’Identity avec la commande suivante. La sortie de la commande inclut une colonne « applied » pour afficher les migrations appliquées à la base de données.

Dans la console du Gestionnaire de package Visual Studio, exécutez Get-Migration:

Get-Migration

S’il existe plusieurs contextes de base de données, spécifiez le contexte avec le paramètre -Context.

Styliser les points de terminaison d’authentification

Étant donné que Blazor utilise des pages RazorPagesIdentity, le style de l’interface utilisateur change lorsqu’un visiteur navigue entre les pages Identity et les composants. Vous disposez de deux options pour traiter les styles incongrus :

Composants d’Identity personnalisés

Une approche de l’utilisation de composants pour Identity au lieu de pages consiste à générer des composants d’Identity. Étant donné que SignInManager et UserManager ne sont pas pris en charge dans les composants Razor, utilisez des points de terminaison d’API web dans l’application Blazor pour traiter les actions de compte d’utilisateur.

Utiliser une disposition personnalisée avec des styles d’application Blazor

La disposition et les styles des pages d’Identity peuvent être modifiés pour produire des pages qui utilisent des styles similaires au thème Blazor par défaut. Cette approche n’est pas couverte par la documentation.

Structurer Identity dans une application Blazor côté serveur avec autorisation

Exécutez le générateur de modèles d’Identity automatique :

  • À partir de l’Explorateur de solutions, cliquez avec le bouton droit sur le projet >Ajouter>Nouvel élément de modèle généré automatiquement.
  • Dans le volet gauche de la boîte de dialogue Ajouter un nouvel élément généré automatiquement, sélectionnez Identity. Sélectionnez Identity dans le volet central. Sélectionnez le bouton Ajouter.
  • Dans la boîte de dialogue Ajouter Identity, sélectionnez les options souhaitées.
    • Si vous disposez d’une page de disposition personnalisée pour Identity (_Layout.cshtml), sélectionnez votre page de disposition existante pour éviter de remplacer votre mise en page avec un balisage incorrect du générateur de modèles automatique. Par exemple, sélectionnez :
      • Pages/Shared/_Layout.cshtml pour les projets Razor Pages ou Blazor Server avec l’infrastructure Razor Pages existante.
      • Views/Shared/_Layout.cshtml pour les projets MVC ou les projets Blazor Server avec une infrastructure MVC existante.
    • Pour le contexte de données (classe DbContext) :
      • Sélectionnez votre classe de contexte de données. Vous devez sélectionner au moins un fichier pour ajouter votre contexte de données.
      • Pour créer un contexte de données et éventuellement créer une classe d’utilisateur pour Identity, sélectionnez le bouton +. Acceptez la valeur par défaut ou spécifiez une classe (par exemple, Contoso.Data.ApplicationDbContext pour une société nommée « Contoso »). Pour créer une classe d’utilisateur, sélectionnez le bouton + pour la classe Utilisateur et spécifiez la classe (par exemple, ContosoUser pour une société nommée « Contoso »).
    • Sélectionnez le bouton Ajouter pour exécuter le générateur de modèles automatique.

Certaines options d’Identity sont configurées dans Areas/Identity/IdentityHostingStartup.cs. Pour plus d’informations, consultez IHostingStartup.

Applications Blazor côté client

Les applications Blazor côté client utilisent leurs propres approches d’interface utilisateur d’Identity et ne peuvent pas utiliser la génération de modèles d’Identity automatique d’ASP.NET Core. Les applications ASP.NET Core côté serveur de solutions Blazor hébergées peuvent suivre les instructions Razor Pages/MVC de cet article et sont configurées comme n’importe quel autre type d’application ASP.NET Core qui prend en charge Identity.

L’infrastructure Blazor n’inclut pas les versions des composants Razor des pages de l’interface utilisateur d’Identity. Les composants de l’interface utilisateur d’IdentityRazor peuvent être générés sur mesure ou obtenus à partir de sources tierces non prises en charge.

Pour plus d’informations, consultez les articles Sécurité Blazor et Identity.

Créer une source d’interface utilisateur d’Identity complète

Pour conserver un contrôle total de l’interface utilisateur d’Identity, exécutez le générateur de modèles d’Identity automatique et sélectionnez Remplacer tous les fichiers.

Le code mis en évidence suivant montre les modifications à apporter pour remplacer l’interface utilisateur d’Identity par défaut par Identity dans une application web ASP.NET Core 2.1. Vous pouvez effectuer cette opération pour avoir un contrôle total de l’interface utilisateur d’Identity.

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()
        .AddRazorPagesOptions(options =>
        {
            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>();
}

La version d’Identity par défaut est remplacée dans le code suivant :

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

Le code suivant définit LoginPath, LogoutPath et AccessDeniedPath):

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

Inscrivez une implémentation IEmailSender, par exemple :

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

Configuration du mot de passe

Si PasswordOptions est configuré dans Startup.ConfigureServices, la configuration de l’attribut [StringLength] peut être requise pour la propriété Password dans les pages d’Identity générées automatiquement. Les propriétés InputModelPassword se trouvent dans les fichiers suivants :

  • Areas/Identity/Pages/Account/Register.cshtml.cs
  • Areas/Identity/Pages/Account/ResetPassword.cshtml.cs

Désactiver une page

Cette section montre comment désactiver la page d’inscription, mais l’approche peut être utilisée pour désactiver n’importe quelle page.

Pour désactiver l’inscription utilisateur :

  • Générez automatiquement des modèles d’Identity. Incluez Account.Register, Account.Login et Account.RegisterConfirmation. Par exemple :

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Mettez à jour Areas/Identity/Pages/Account/Register.cshtml.cs pour que les utilisateurs ne puissent pas s’inscrire à partir de ce point de terminaison :

    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 être cohérent avec les modifications précédentes :

    @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>
    
  • Mettez en commentaires ou supprimez le lien d’inscription à partir de 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.

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

Utiliser une autre application pour ajouter des utilisateurs

Fournissez un mécanisme pour ajouter des utilisateurs en dehors de l’application web. Les options d’ajout d’utilisateurs sont les suivantes :

  • Une application web d’administration dédiée.
  • Une application console.

Le code suivant décrit une approche pour ajouter des utilisateurs :

  • Une liste d’utilisateurs est lue en mémoire.
  • Un mot de passe unique fort est généré pour chaque utilisateur.
  • L’utilisateur est ajouté à la base de données d’Identity.
  • L’utilisateur est averti et invité à modifier le mot de passe.
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>();
            });
}

Le code suivant décrit l’ajout d’un utilisateur :


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.

Empêcher la publication de ressources statiques d’Identity

Pour empêcher la publication de ressources statiques d’Identity sur la racine web, consultez Présentation d’Identity sur ASP.NET Core.

Ressources supplémentaires

Modifications apportées au code d’authentification dans ASP.NET Core 2.1 et versions ultérieures