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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de