Share via


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