Convenciones de autorización de las páginas de Razor en ASP.NET CoreRazor Pages authorization conventions in ASP.NET Core

Por Luke LathamBy Luke Latham

Una manera de controlar el acceso en la aplicación de las páginas de Razor es usar las convenciones de autorización en el inicio.One way to control access in your Razor Pages app is to use authorization conventions at startup. Estas convenciones permiten autorizar a los usuarios y permite que los usuarios anónimos tener acceso a páginas individuales o carpetas de páginas.These conventions allow you to authorize users and allow anonymous users to access individual pages or folders of pages. Aplican las convenciones descritas en este tema automáticamente los filtros de autorización para controlar el acceso.The conventions described in this topic automatically apply authorization filters to control access.

Vea o descargue el código de ejemplo (cómo descargarlo)View or download sample code (how to download)

La aplicación de ejemplo usa autenticación de cookies sin ASP.NET Core Identity.The sample app uses cookie authentication without ASP.NET Core Identity. Los conceptos y ejemplos que se muestran en este tema se aplican igualmente a las aplicaciones que usan ASP.NET Core Identity.The concepts and examples shown in this topic apply equally to apps that use ASP.NET Core Identity. Para usar ASP.NET Core Identity, siga las instrucciones de Introducción a la identidad en ASP.NET Core.To use ASP.NET Core Identity, follow the guidance in Introducción a la identidad en ASP.NET Core.

Requerir autorización para acceder a una páginaRequire authorization to access a page

Use la AuthorizePage convención a través de AddRazorPagesOptions para agregar un AuthorizeFilter a la página en la ruta de acceso especificada:Use the AuthorizePage convention via AddRazorPagesOptions to add an AuthorizeFilter to the page at the specified path:

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

La ruta de acceso especificada es la ruta de acceso del motor de vista, que es la ruta relativa de raíz de las páginas de Razor sin una extensión y que contiene solo barras diagonales.The specified path is the View Engine path, which is the Razor Pages root relative path without an extension and containing only forward slashes.

Para especificar un directiva de autorización, utilice un AuthorizePage sobrecarga:To specify an authorization policy, use an AuthorizePage overload:

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

Nota

Un AuthorizeFilter puede aplicarse a una clase de modelo de página con el [Authorize] atributo de filtro.An AuthorizeFilter can be applied to a page model class with the [Authorize] filter attribute. Para obtener más información, consulte atributo de filtro Authorize.For more information, see Authorize filter attribute.

Requerir autorización para acceder a una carpeta de páginasRequire authorization to access a folder of pages

Use la AuthorizeFolder convención a través de AddRazorPagesOptions para agregar un AuthorizeFilter a todas las páginas en una carpeta en la ruta de acceso especificada:Use the AuthorizeFolder convention via AddRazorPagesOptions to add an AuthorizeFilter to all of the pages in a folder at the specified path:

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

La ruta de acceso especificada es la ruta de acceso del motor de vista, que es la ruta de acceso relativa de las páginas de Razor raíz.The specified path is the View Engine path, which is the Razor Pages root relative path.

Para especificar un directiva de autorización, utilice un AuthorizeFolder sobrecarga:To specify an authorization policy, use an AuthorizeFolder overload:

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

Requerir autorización para acceder a una página de áreaRequire authorization to access an area page

Use la AuthorizeAreaPage convención a través de AddRazorPagesOptions para agregar un AuthorizeFilter a la página de área en la ruta de acceso especificada:Use the AuthorizeAreaPage convention via AddRazorPagesOptions to add an AuthorizeFilter to the area page at the specified path:

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

El nombre de página es la ruta de acceso del archivo sin extensión relativa al directorio raíz de páginas para el área especificada.The page name is the path of the file without an extension relative to the pages root directory for the specified area. Por ejemplo, el nombre de página para el archivo Areas/Identity/Pages/Manage/Accounts.cshtml es cuentas/administración/.For example, the page name for the file Areas/Identity/Pages/Manage/Accounts.cshtml is /Manage/Accounts.

Para especificar un directiva de autorización, utilice un AuthorizeAreaPage sobrecarga:To specify an authorization policy, use an AuthorizeAreaPage overload:

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

Requerir autorización para acceder a una carpeta de áreasRequire authorization to access a folder of areas

Use la AuthorizeAreaFolder convención a través de AddRazorPagesOptions para agregar un AuthorizeFilter a todas las áreas en una carpeta en la ruta de acceso especificada:Use the AuthorizeAreaFolder convention via AddRazorPagesOptions to add an AuthorizeFilter to all of the areas in a folder at the specified path:

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

La ruta de acceso de carpeta es la ruta de acceso de la carpeta relativa al directorio raíz de las páginas del área especificada.The folder path is the path of the folder relative to the pages root directory for the specified area. Por ejemplo, la ruta de carpeta para los archivos en áreas/identidad/páginas/administrar o es /administrar.For example, the folder path for the files under Areas/Identity/Pages/Manage/ is /Manage.

Para especificar un directiva de autorización, utilice un AuthorizeAreaFolder sobrecarga:To specify an authorization policy, use an AuthorizeAreaFolder overload:

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

Permitir el acceso anónimo a una páginaAllow anonymous access to a page

Use la AllowAnonymousToPage convención a través de AddRazorPagesOptions para agregar una AllowAnonymousFilter a una página en la ruta de acceso especificada:Use the AllowAnonymousToPage convention via AddRazorPagesOptions to add an AllowAnonymousFilter to a page at the specified path:

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

La ruta de acceso especificada es la ruta de acceso del motor de vista, que es la ruta relativa de raíz de las páginas de Razor sin una extensión y que contiene solo barras diagonales.The specified path is the View Engine path, which is the Razor Pages root relative path without an extension and containing only forward slashes.

Permitir el acceso anónimo a la carpeta páginasAllow anonymous access to a folder of pages

Use la AllowAnonymousToFolder convención a través de AddRazorPagesOptions para agregar un AllowAnonymousFilter a todas las páginas en una carpeta en la ruta de acceso especificada:Use the AllowAnonymousToFolder convention via AddRazorPagesOptions to add an AllowAnonymousFilter to all of the pages in a folder at the specified path:

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

La ruta de acceso especificada es la ruta de acceso del motor de vista, que es la ruta de acceso relativa de las páginas de Razor raíz.The specified path is the View Engine path, which is the Razor Pages root relative path.

Tenga en cuenta sobre la combinación de acceso autorizado y anónimoNote on combining authorized and anonymous access

Es válido para especificar que una carpeta de páginas que requieren autorización y de especificar que una página dentro de esa carpeta permite el acceso anónimo:It's valid to specify that a folder of pages that require authorization and than specify that a page within that folder allows anonymous access:

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

Sin embargo, la inversa, no es válida.The reverse, however, isn't valid. No se puede declarar una carpeta de páginas para el acceso anónimo y, a continuación, especifique una página dentro de esa carpeta que requiere autorización:You can't declare a folder of pages for anonymous access and then specify a page within that folder that requires authorization:

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

Se produce un error que requiere autorización en la página privada.Requiring authorization on the Private page fails. Cuando tanto el AllowAnonymousFilter y AuthorizeFilter se aplican a la página, el AllowAnonymousFilter tiene prioridad y controla el acceso.When both the AllowAnonymousFilter and AuthorizeFilter are applied to the page, the AllowAnonymousFilter takes precedence and controls access.

Recursos adicionalesAdditional resources