Conventions des autorisations de Razor Pages dans ASP.NET Core

Une façon de contrôler l'accès dans votre application Pages Razor consiste à utiliser des conventions d'autorisation au démarrage. Ces conventions vous permettent d'autoriser les utilisateurs et d'autoriser les utilisateurs anonymes à accéder à des pages individuelles ou à des dossiers de pages. Les conventions décrites dans cette rubrique appliquent automatiquement des filtres d'autorisation pour contrôler l'accès.

Affichez ou téléchargez l’exemple de code (procédure de téléchargement)

L'exemple d'application utilise cookie l'authentification sans ASP.NET Core Identity. Les concepts et exemples présentés dans cette rubrique s'appliquent également aux applications qui utilisent ASP.NET Core Identity. Pour utiliser ASP.NET Core Identity, suivez les instructions dans Introduction à Identity sur ASP.NET Core.

Exiger une autorisation pour accéder à une page

Utilisez la convention AuthorizePage pour ajouter un AuthorizeFilter à la page au chemin spécifié :

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

Le chemin spécifié est le chemin View Engine, qui est le chemin relatif de la racine des Pages Razor sans extension et contenant uniquement des barres obliques.

Pour spécifier une stratégie d'autorisation, utilisez une surcharge AuthorizePage :

options.Conventions.AuthorizePage("/Contact", "AtLeast21");

Notes

Un AuthorizeFilter peut être appliqué à une classe de modèle de page avec l'attribut filtre [Authorize]. Pour plus d'informations, consultez Autoriser l'attribut de filtre.

Exiger une autorisation pour accéder à un dossier de pages

Utilisez la convention AuthorizeFolder pour ajouter un AuthorizeFilter à toutes les pages d'un dossier au chemin spécifié :

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

Le chemin spécifié est le chemin du moteur de vue, qui est le chemin relatif de la racine Pages Razor.

Pour spécifier une stratégie d'autorisation, utilisez une surcharge AuthorizeFolder :

options.Conventions.AuthorizeFolder("/Private", "AtLeast21");

Exiger une autorisation pour accéder à une page de zone

Utilisez la convention AuthorizeAreaPage pour ajouter un AuthorizeFilter à la page de zone au chemin spécifié :

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");

Le nom de la page est le chemin du fichier sans extension relatif au répertoire racine des pages pour la zone spécifiée. Par exemple, le nom de page du fichier Areas/Identity/Pages/Manage/Accounts.cshtml est /Manage/Accounts.

Pour spécifier une stratégie d'autorisation, utilisez une surcharge AuthorizeAreaPage :

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");

Exiger une autorisation pour accéder à un dossier de zones

Utilisez la convention AuthorizeAreaFolder pour ajouter un AuthorizeFilter à toutes les zones d'un dossier au chemin spécifié :

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");

Le chemin du dossier est le chemin du dossier relatif au répertoire racine des pages pour la zone spécifiée. Par exemple, le chemin du dossier pour les fichiers sous Areas/Identity/Pages/Manage/ est /Manage.

Pour spécifier une stratégie d'autorisation, utilisez une surcharge AuthorizeAreaFolder :

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");

Autoriser l'accès anonyme à une page

Utilisez la convention AllowAnonymousToPage pour ajouter un à AllowAnonymousFilter une page au chemin spécifié :

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

Le chemin spécifié est le chemin View Engine, qui est le chemin relatif de la racine des Pages Razor sans extension et contenant uniquement des barres obliques.

Autoriser l'accès anonyme à un dossier de pages

Utilisez la convention AllowAnonymousToFolder pour ajouter un AllowAnonymousFilter à toutes les pages d'un dossier au chemin spécifié :

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

Le chemin spécifié est le chemin du moteur de vue, qui est le chemin relatif de la racine Pages Razor.

Remarque sur la combinaison des accès autorisés et anonymes

Il est valide de spécifier qu'un dossier de pages nécessite une autorisation, puis de spécifier qu'une page de ce dossier autorise l'accès anonyme :

// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")

L'inverse, cependant, n'est pas valable. Vous ne pouvez pas déclarer un dossier de pages pour un accès anonyme, puis spécifier une page dans ce dossier qui nécessite une autorisation :

// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")

La demande d'autorisation sur la page privée échoue. Lorsque le AllowAnonymousFilter et AuthorizeFilter sont appliqués à la page, le AllowAnonymousFilter prévaut et contrôle l'accès.

Ressources supplémentaires

Une façon de contrôler l'accès dans votre application Pages Razor consiste à utiliser des conventions d'autorisation au démarrage. Ces conventions vous permettent d'autoriser les utilisateurs et d'autoriser les utilisateurs anonymes à accéder à des pages individuelles ou à des dossiers de pages. Les conventions décrites dans cette rubrique appliquent automatiquement des filtres d'autorisation pour contrôler l'accès.

Affichez ou téléchargez l’exemple de code (procédure de téléchargement)

L'exemple d'application utilise cookie l'authentification sans ASP.NET Core Identity. Les concepts et exemples présentés dans cette rubrique s'appliquent également aux applications qui utilisent ASP.NET Core Identity. Pour utiliser ASP.NET Core Identity, suivez les instructions dans Introduction à Identity sur ASP.NET Core.

Exiger une autorisation pour accéder à une page

Utilisez la convention AuthorizePage via AddRazorPagesOptions pour ajouter un AuthorizeFilter à la page au chemin spécifié :

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

Le chemin spécifié est le chemin View Engine, qui est le chemin relatif de la racine des Pages Razor sans extension et contenant uniquement des barres obliques.

Pour spécifier une stratégie d'autorisation, utilisez une surcharge AuthorizePage :

options.Conventions.AuthorizePage("/Contact", "AtLeast21");

Notes

Un AuthorizeFilter peut être appliqué à une classe de modèle de page avec l'attribut filtre [Authorize]. Pour plus d'informations, consultez Autoriser l'attribut de filtre.

Exiger une autorisation pour accéder à un dossier de pages

Utilisez la convention AuthorizeFolder via AddRazorPagesOptions pour ajouter un AuthorizeFilter à toutes les pages d'un dossier au chemin spécifié :

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

Le chemin spécifié est le chemin du moteur de vue, qui est le chemin relatif de la racine Pages Razor.

Pour spécifier une stratégie d'autorisation, utilisez une surcharge AuthorizeFolder :

options.Conventions.AuthorizeFolder("/Private", "AtLeast21");

Exiger une autorisation pour accéder à une page de zone

Utilisez la convention AuthorizeAreaPage via AddRazorPagesOptions pour ajouter un AuthorizeFilter à la page de zone au chemin spécifié :

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");

Le nom de la page est le chemin du fichier sans extension relatif au répertoire racine des pages pour la zone spécifiée. Par exemple, le nom de page du fichier Areas/Identity/Pages/Manage/Accounts.cshtml est /Manage/Accounts.

Pour spécifier une stratégie d'autorisation, utilisez une surcharge AuthorizeAreaPage :

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");

Exiger une autorisation pour accéder à un dossier de zones

Utilisez la convention AuthorizeAreaFolder via AddRazorPagesOptions pour ajouter un AuthorizeFilter à toutes les zones d'un dossier au chemin spécifié :

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");

Le chemin du dossier est le chemin du dossier relatif au répertoire racine des pages pour la zone spécifiée. Par exemple, le chemin du dossier pour les fichiers sous Areas/Identity/Pages/Manage/ est /Manage.

Pour spécifier une stratégie d'autorisation, utilisez une surcharge AuthorizeAreaFolder :

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");

Autoriser l'accès anonyme à une page

Utilisez la convention AllowAnonymousToPage via AddRazorPagesOptions pour ajouter un AllowAnonymousFilter à une page au chemin spécifié :

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

Le chemin spécifié est le chemin View Engine, qui est le chemin relatif de la racine des Pages Razor sans extension et contenant uniquement des barres obliques.

Autoriser l'accès anonyme à un dossier de pages

Utilisez la convention AllowAnonymousToFolder via AddRazorPagesOptions pour ajouter un AllowAnonymousFilter à toutes les pages d'un dossier au chemin spécifié :

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

Le chemin spécifié est le chemin du moteur de vue, qui est le chemin relatif de la racine Pages Razor.

Remarque sur la combinaison des accès autorisés et anonymes

Il est valide de spécifier qu'un dossier de pages nécessitant une autorisation et de spécifier qu'une page de ce dossier autorise l'accès anonyme :

// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")

L'inverse, cependant, n'est pas valable. Vous ne pouvez pas déclarer un dossier de pages pour un accès anonyme, puis spécifier une page dans ce dossier qui nécessite une autorisation :

// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")

La demande d'autorisation sur la page privée échoue. Lorsque le AllowAnonymousFilter et AuthorizeFilter sont appliqués à la page, le AllowAnonymousFilter prévaut et contrôle l'accès.

Ressources supplémentaires