Convenções de autorização do Razor Pages no ASP.NET Core

Uma maneira de controlar o acesso em seu aplicativo Razor Pages é usar convenções de autorização na inicialização. Essas convenções permitem autorizar usuários e permitir que usuários anônimos acessem páginas individuais ou pastas de páginas. As convenções descritas neste tópico aplicam automaticamente filtros de autorização para controlar o acesso.

Exibir ou baixar código de exemplo (como baixar)

O aplicativo de exemplo usa a autenticação cookie sem o ASP.NET Core Identity. Os conceitos e exemplos mostrados neste tópico se aplicam igualmente a aplicativos que usam o ASP.NET Core Identity. Para usar o ASP.NET Core Identity, siga as diretrizes em Introdução ao Identity no ASP.NET Core.

Exigir autorização para acessar uma página

Use a convenção AuthorizePage para adicionar um AuthorizeFilter à página no caminho especificado:

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

O caminho especificado é o caminho do Mecanismo de Exibição, que é o caminho relativo raiz do Razor Pages sem uma extensão e contendo apenas barras.

Para especificar uma política de autorização, use uma sobrecarga AuthorizePage:

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

Observação

Um AuthorizeFilter pode ser aplicado a uma classe de modelo de página com o atributo de filtro [Authorize]. Para obter mais informações, confira o atributo de filtro Authorize.

Exigir autorização para acessar uma pasta de páginas

Use a convenção AuthorizeFolder para adicionar um AuthorizeFilter a todas as páginas em uma pasta no caminho especificado:

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

O caminho especificado é o caminho do Mecanismo de Exibição, que é o caminho relativo raiz do Razor Pages.

Para especificar uma política de autorização, use uma sobrecarga AuthorizeFolder:

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

Exigir autorização para acessar uma página de área

Use a convenção AuthorizeAreaPage para adicionar um AuthorizeFilter à página de área no caminho especificado:

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

O nome da página é o caminho do arquivo sem uma extensão relativa ao diretório raiz das páginas para a área especificada. Por exemplo, o nome da página do arquivo Areas/Identity/Pages/Manage/Accounts.cshtml é /Manage/Accounts.

Para especificar uma política de autorização, use uma sobrecarga AuthorizeAreaPage:

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

Exigir autorização para acessar uma pasta de áreas

Use a convenção AuthorizeAreaFolder para adicionar um AuthorizeFilter a todas as áreas em uma pasta no caminho especificado:

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

O caminho da pasta é o caminho da pasta em relação ao diretório raiz das páginas para a área especificada. Por exemplo, o caminho da pasta para os arquivos em Areas/Identity/Pages/Manage/ é /Manage.

Para especificar uma política de autorização, use uma sobrecarga AuthorizeAreaFolder:

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

Permitir acesso anônimo a uma página

Use a convenção AllowAnonymousToPage para adicionar um AllowAnonymousFilter à página no caminho especificado:

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

O caminho especificado é o caminho do Mecanismo de Exibição, que é o caminho relativo raiz do Razor Pages sem uma extensão e contendo apenas barras.

Permitir acesso anônimo a uma pasta de páginas

Use a convenção AllowAnonymousToFolder para adicionar um AllowAnonymousFilter a todas as páginas em uma pasta no caminho especificado:

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

O caminho especificado é o caminho do Mecanismo de Exibição, que é o caminho relativo raiz do Razor Pages.

Observação sobre a combinação de acesso autorizado e anônimo

É válido especificar que uma pasta de páginas requer autorização e, em seguida, especificar que uma página dentro dessa pasta permite o acesso anônimo:

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

O inverso, no entanto, não é válido. Você não pode declarar uma pasta de páginas para acesso anônimo e, em seguida, especificar uma página dentro dessa pasta que exija autorização:

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

Falha ao exigir autorização na página Privada. Quando AllowAnonymousFilter e AuthorizeFilter são aplicados à página, o AllowAnonymousFilter tem precedência e controla o acesso.

Recursos adicionais

Uma maneira de controlar o acesso em seu aplicativo Razor Pages é usar convenções de autorização na inicialização. Essas convenções permitem autorizar usuários e permitir que usuários anônimos acessem páginas individuais ou pastas de páginas. As convenções descritas neste tópico aplicam automaticamente filtros de autorização para controlar o acesso.

Exibir ou baixar código de exemplo (como baixar)

O aplicativo de exemplo usa a autenticação cookie sem o ASP.NET Core Identity. Os conceitos e exemplos mostrados neste tópico se aplicam igualmente a aplicativos que usam o ASP.NET Core Identity. Para usar o ASP.NET Core Identity, siga as diretrizes em Introdução ao Identity no ASP.NET Core.

Exigir autorização para acessar uma página

Use a convenção AuthorizePage por meio do AddRazorPagesOptions para adicionar um AuthorizeFilter à página no caminho especificado:

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

O caminho especificado é o caminho do Mecanismo de Exibição, que é o caminho relativo raiz do Razor Pages sem uma extensão e contendo apenas barras.

Para especificar uma política de autorização, use uma sobrecarga AuthorizePage:

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

Observação

Um AuthorizeFilter pode ser aplicado a uma classe de modelo de página com o atributo de filtro [Authorize]. Para obter mais informações, confira o atributo de filtro Authorize.

Exigir autorização para acessar uma pasta de páginas

Use a convenção AuthorizeFolder por meio de AddRazorPagesOptions para adicionar um AuthorizeFilter a todas as páginas em uma pasta no caminho especificado:

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

O caminho especificado é o caminho do Mecanismo de Exibição, que é o caminho relativo raiz do Razor Pages.

Para especificar uma política de autorização, use uma sobrecarga AuthorizeFolder:

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

Exigir autorização para acessar uma página de área

Use a convenção AuthorizeAreaPage por meio do AddRazorPagesOptions para adicionar um AuthorizeFilter à página de área no caminho especificado:

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

O nome da página é o caminho do arquivo sem uma extensão relativa ao diretório raiz das páginas para a área especificada. Por exemplo, o nome da página do arquivo Areas/Identity/Pages/Manage/Accounts.cshtml é /Manage/Accounts.

Para especificar uma política de autorização, use uma sobrecarga AuthorizeAreaPage:

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

Exigir autorização para acessar uma pasta de áreas

Use a convenção AuthorizeAreaFolder por meio de AddRazorPagesOptions para adicionar um AuthorizeFilter a todas as áreas em uma pasta no caminho especificado:

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

O caminho da pasta é o caminho da pasta em relação ao diretório raiz das páginas para a área especificada. Por exemplo, o caminho da pasta para os arquivos em Areas/Identity/Pages/Manage/ é /Manage.

Para especificar uma política de autorização, use uma sobrecarga AuthorizeAreaFolder:

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

Permitir acesso anônimo a uma página

Use a AllowAnonymousToPage convenção via AddRazorPagesOptions para adicionar um AllowAnonymousFilter a uma página no caminho especificado:

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

O caminho especificado é o caminho do Mecanismo de Exibição, que é o caminho relativo raiz do Razor Pages sem uma extensão e contendo apenas barras.

Permitir acesso anônimo a uma pasta de páginas

Use a convenção AllowAnonymousToFolder por meio de AddRazorPagesOptions para adicionar um AllowAnonymousFilter a todas as páginas em uma pasta no caminho especificado:

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

O caminho especificado é o caminho do Mecanismo de Exibição, que é o caminho relativo raiz do Razor Pages.

Observação sobre a combinação de acesso autorizado e anônimo

É válido especificar que uma pasta de páginas que exige autorização e, em seguida, especificar que uma página dentro dessa pasta permite o acesso anônimo:

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

O inverso, no entanto, não é válido. Você não pode declarar uma pasta de páginas para acesso anônimo e, em seguida, especificar uma página dentro dessa pasta que exija autorização:

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

Falha ao exigir autorização na página Privada. Quando AllowAnonymousFilter e AuthorizeFilter são aplicados à página, o AllowAnonymousFilter tem precedência e controla o acesso.

Recursos adicionais