Razor Convenzioni di autorizzazione pagine in ASP.NET Core

Un modo per controllare l'accesso nell'app Pages consiste nell'usare Razor le convenzioni di autorizzazione all'avvio. Queste convenzioni consentono di autorizzare gli utenti e consentire agli utenti anonimi di accedere a singole pagine o cartelle di pagine. Le convenzioni descritte in questo argomento applicano automaticamente i filtri di autorizzazione per controllare l'accesso.

Visualizzare o scaricare il codice di esempio (procedura per il download)

L'app di esempio usa cookie l'autenticazione senza ASP.NET Core Identity. I concetti e gli esempi illustrati in questo argomento si applicano allo stesso modo alle app che usano ASP.NET Core Identity. Per usare ASP.NET Core Identity, seguire le indicazioni riportate in Introduzione a Identity in ASP.NET Core.

Richiedere l'autorizzazione per accedere a una pagina

Usare la AuthorizePage convenzione per aggiungere un oggetto AuthorizeFilter alla pagina nel percorso specificato:

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

Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine senza un'estensione e contenente solo barre.

Per specificare un criterio di autorizzazione, usare un overload AuthorizePage:

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

Nota

Un AuthorizeFilter oggetto può essere applicato a una classe modello di pagina con l'attributo [Authorize] filter. Per altre informazioni, vedere Autorizzare l'attributo di filtro.

Richiedere l'autorizzazione per accedere a una cartella di pagine

Usare la AuthorizeFolder convenzione per aggiungere un oggetto AuthorizeFilter a tutte le pagine di una cartella nel percorso specificato:

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

Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine.

Per specificare un criterio di autorizzazione, usare un overload AuthorizeFolder:

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

Richiedere l'autorizzazione per accedere a una pagina di area

Usare la AuthorizeAreaPage convenzione per aggiungere un oggetto AuthorizeFilter alla pagina dell'area nel percorso specificato:

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

Il nome della pagina è il percorso del file senza estensione relativa alla directory radice delle pagine per l'area specificata. Ad esempio, il nome della pagina per il file Areas/Identity/Pages/Manage/Accounts.cshtml è /Manage/Accounts.

Per specificare un criterio di autorizzazione, usare un overload AuthorizeAreaPage:

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

Richiedere l'autorizzazione per accedere a una cartella di aree

Usare la AuthorizeAreaFolder convenzione per aggiungere un oggetto AuthorizeFilter a tutte le aree di una cartella nel percorso specificato:

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

Il percorso della cartella è il percorso della cartella relativa alla directory radice delle pagine per l'area specificata. Ad esempio, il percorso della cartella per i file in Aree//IdentityPagine/Gestisci/ è /Manage.

Per specificare un criterio di autorizzazione, usare un overload AuthorizeAreaFolder:

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

Consentire l'accesso anonimo a una pagina

Usare la AllowAnonymousToPage convenzione per aggiungere un oggetto AllowAnonymousFilter a una pagina nel percorso specificato:

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

Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine senza un'estensione e contenente solo barre.

Consentire l'accesso anonimo a una cartella di pagine

Usare la AllowAnonymousToFolder convenzione per aggiungere un oggetto AllowAnonymousFilter a tutte le pagine di una cartella nel percorso specificato:

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

Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine.

Nota sulla combinazione di accesso autorizzato e anonimo

È valido specificare che una cartella di pagine richiede l'autorizzazione e quindi specificare che una pagina all'interno di tale cartella consente l'accesso anonimo:

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

Il contrario, tuttavia, non è valido. Non è possibile dichiarare una cartella di pagine per l'accesso anonimo e quindi specificare una pagina all'interno di tale cartella che richiede l'autorizzazione:

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

La richiesta di autorizzazione nella pagina Privata ha esito negativo. Quando entrambi gli AllowAnonymousFilter oggetti e AuthorizeFilter vengono applicati alla pagina, ha la precedenza e controlla l'accesso AllowAnonymousFilter .

Risorse aggiuntive

Un modo per controllare l'accesso nell'app Pages consiste nell'usare Razor le convenzioni di autorizzazione all'avvio. Queste convenzioni consentono di autorizzare gli utenti e consentire agli utenti anonimi di accedere a singole pagine o cartelle di pagine. Le convenzioni descritte in questo argomento applicano automaticamente i filtri di autorizzazione per controllare l'accesso.

Visualizzare o scaricare il codice di esempio (procedura per il download)

L'app di esempio usa cookie l'autenticazione senza ASP.NET Core Identity. I concetti e gli esempi illustrati in questo argomento si applicano allo stesso modo alle app che usano ASP.NET Core Identity. Per usare ASP.NET Core Identity, seguire le indicazioni riportate in Introduzione a Identity in ASP.NET Core.

Richiedere l'autorizzazione per accedere a una pagina

Usare la AuthorizePage convenzione tramite AddRazorPagesOptions per aggiungere un oggetto AuthorizeFilter alla pagina nel percorso specificato:

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);

Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine senza un'estensione e contenente solo barre.

Per specificare un criterio di autorizzazione, usare un overload AuthorizePage:

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

Nota

Un AuthorizeFilter oggetto può essere applicato a una classe modello di pagina con l'attributo [Authorize] filter. Per altre informazioni, vedere Autorizzare l'attributo di filtro.

Richiedere l'autorizzazione per accedere a una cartella di pagine

Usare la AuthorizeFolder convenzione tramite AddRazorPagesOptions per aggiungere un AuthorizeFilter oggetto a tutte le pagine di una cartella nel percorso specificato:

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);

Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine.

Per specificare un criterio di autorizzazione, usare un overload AuthorizeFolder:

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

Richiedere l'autorizzazione per accedere a una pagina di area

Usare la AuthorizeAreaPage convenzione tramite AddRazorPagesOptions per aggiungere un oggetto AuthorizeFilter alla pagina dell'area nel percorso specificato:

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

Il nome della pagina è il percorso del file senza estensione relativa alla directory radice delle pagine per l'area specificata. Ad esempio, il nome della pagina per il file Areas/Identity/Pages/Manage/Accounts.cshtml è /Manage/Accounts.

Per specificare un criterio di autorizzazione, usare un overload AuthorizeAreaPage:

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

Richiedere l'autorizzazione per accedere a una cartella di aree

Usare la AuthorizeAreaFolder convenzione tramite AddRazorPagesOptions per aggiungere un oggetto AuthorizeFilter a tutte le aree di una cartella nel percorso specificato:

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

Il percorso della cartella è il percorso della cartella relativa alla directory radice delle pagine per l'area specificata. Ad esempio, il percorso della cartella per i file in Aree//IdentityPagine/Gestisci/ è /Manage.

Per specificare un criterio di autorizzazione, usare un overload AuthorizeAreaFolder:

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

Consentire l'accesso anonimo a una pagina

Usare la AllowAnonymousToPage convenzione tramite AddRazorPagesOptions per aggiungere un oggetto AllowAnonymousFilter a una pagina nel percorso specificato:

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);

Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine senza un'estensione e contenente solo barre.

Consentire l'accesso anonimo a una cartella di pagine

Usare la AllowAnonymousToFolder convenzione tramite AddRazorPagesOptions per aggiungere un AllowAnonymousFilter oggetto a tutte le pagine di una cartella nel percorso specificato:

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);

Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine.

Nota sulla combinazione di accesso autorizzato e anonimo

È possibile specificare che una cartella di pagine che richiedono l'autorizzazione e che non specifichi che una pagina all'interno di tale cartella consenta l'accesso anonimo:

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

Il contrario, tuttavia, non è valido. Non è possibile dichiarare una cartella di pagine per l'accesso anonimo e quindi specificare una pagina all'interno di tale cartella che richiede l'autorizzazione:

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

La richiesta di autorizzazione nella pagina Privata ha esito negativo. Quando entrambi gli AllowAnonymousFilter oggetti e AuthorizeFilter vengono applicati alla pagina, ha la precedenza e controlla l'accesso AllowAnonymousFilter .

Risorse aggiuntive