RazorConvenciones de autorización de Pages en ASP.NET Core

Una forma de controlar el acceso en sus Razor Pages es usar convenciones de autorización en el inicio. Estas convenciones permiten autorizar a los usuarios y permitir que los usuarios anónimos accedan a páginas individuales o carpetas de páginas. Las convenciones descritas en este tema aplican automáticamente filtros de autorización para controlar el acceso.

Vea o descargue el código de ejemplo (cómo descargarlo)

La aplicación de ejemplo usa la autenticación de cookie sin 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. Para usar ASP.NET Core Identity, siga las instrucciones de Introducción a Identity en ASP.NET Core.

Requerir autorización para acceder a una página

Use la convención AuthorizePage para agregar un AuthorizeFilter a la página en la ruta de acceso especificada:

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

La ruta especificada es la ruta del motor de visualización, que es la ruta de acceso relativa de Razor Pages sin extensión y que solo contiene barras diagonales.

Para especificar una directiva de autorización, use una sobrecarga AuthorizePage:

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

Nota

Se puede aplicar un AuthorizeFilter a una clase de modelo de página con el atributo de filtro [Authorize]. Para más información, consulte Atributo de filtro de autorización.

Requerir autorización para acceder a una carpeta de páginas

Use la convención AuthorizeFolder para agregar un AuthorizeFilter a todas las páginas de una carpeta en la ruta de acceso especificada:

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

La ruta especificada es la ruta del motor de visualización, que es la ruta de acceso relativa de Razor Pages.

Para especificar una directiva de autorización, use una sobrecarga AuthorizeFolder:

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

Requerir autorización para acceder a una página de área

Use la convención AuthorizeAreaPage para agregar un AuthorizeFilter a la página del área en la ruta de acceso especificada:

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

El nombre de página es la ruta de acceso del archivo sin una extensión relativa al directorio raíz de páginas para el área especificada. Por ejemplo, el nombre de página del archivo Areas/Identity/Pages/Manage/Accounts.cshtml es /Manage/Accounts.

Para especificar una directiva de autorización, use una sobrecarga AuthorizePage:

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

Requerir autorización para acceder a una carpeta de áreas

Use la convención AuthorizeAreaFolder para agregar un AuthorizeFilter a todas las áreas de una carpeta en la ruta de acceso especificada:

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

La ruta de acceso a la carpeta es la ruta de la carpeta relativa al directorio raíz de las páginas para el área especificada. Por ejemplo, la ruta de acceso de la carpeta de los archivos en Areas/Identity/Pages/Manage/ es /Manage.

Para especificar una directiva de autorización, use una sobrecarga AuthorizeAreaFolder:

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

Permitir el acceso anónimo a una página

Use la convención AllowAnonymousToPage para agregar un AllowAnonymousFilter a una página en la ruta de acceso especificada:

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

La ruta especificada es la ruta del motor de visualización, que es la ruta de acceso relativa de Razor Pages sin extensión y que solo contiene barras diagonales.

Permitir el acceso anónimo a una carpeta de páginas

Use la convención AllowAnonymousToFolder para agregar un AllowAnonymousFilter a todas las páginas de una carpeta en la ruta de acceso especificada:

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

La ruta especificada es la ruta del motor de visualización, que es la ruta de acceso relativa de Razor Pages.

Nota sobre la combinación de acceso autorizado y anónimo

Es válido especificar que una carpeta de páginas requiere autorización y, a continuación, especificar que una página dentro de esa carpeta permite el acceso anónimo:

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

Sin embargo, el valor inverso no es válido. No se puede declarar una carpeta de páginas para el acceso anónimo y, a continuación, especificar una página dentro de esa carpeta que requiera autorización:

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

Se produce un error al requerir autorización en la página Privada. Cuando tanto AllowAnonymousFilter como AuthorizeFilter se aplican a la página, AllowAnonymousFilter tiene prioridad y controla el acceso.

Recursos adicionales

Una forma de controlar el acceso en sus Razor Pages es usar convenciones de autorización en el inicio. Estas convenciones permiten autorizar a los usuarios y permitir que los usuarios anónimos accedan a páginas individuales o carpetas de páginas. Las convenciones descritas en este tema aplican automáticamente filtros de autorización para controlar el acceso.

Vea o descargue el código de ejemplo (cómo descargarlo)

La aplicación de ejemplo usa la autenticación de cookie sin 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. Para usar ASP.NET Core Identity, siga las instrucciones de Introducción a Identity en ASP.NET Core.

Requerir autorización para acceder a una página

Use la convención AuthorizePage a través de AddRazorPagesOptions para agregar un AuthorizeFilter a la página en la ruta de acceso especificada:

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 especificada es la ruta del motor de visualización, que es la ruta de acceso relativa de Razor Pages sin extensión y que solo contiene barras diagonales.

Para especificar una directiva de autorización, use una sobrecarga AuthorizePage:

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

Nota

Se puede aplicar un AuthorizeFilter a una clase de modelo de página con el atributo de filtro [Authorize]. Para más información, consulte Atributo de filtro de autorización.

Requerir autorización para acceder a una carpeta de páginas

Use la convención AuthorizeFolder a través de AddRazorPagesOptions para agregar un AuthorizeFilter a todas las páginas de una carpeta en la ruta de acceso especificada:

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 especificada es la ruta del motor de visualización, que es la ruta de acceso relativa de Razor Pages.

Para especificar una directiva de autorización, use una sobrecarga AuthorizeFolder:

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

Requerir autorización para acceder a una página de área

Use la convención AuthorizeAreaPage a través de AddRazorPagesOptions para agregar un AuthorizeFilter a la página de área en la ruta de acceso especificada:

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

El nombre de página es la ruta de acceso del archivo sin una extensión relativa al directorio raíz de páginas para el área especificada. Por ejemplo, el nombre de página del archivo Areas/Identity/Pages/Manage/Accounts.cshtml es /Manage/Accounts.

Para especificar una directiva de autorización, use una sobrecarga AuthorizePage:

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

Requerir autorización para acceder a una carpeta de áreas

Use la convención AuthorizeAreaFolder a través de AddRazorPagesOptions para agregar un AuthorizeFilter a todas las áreas de una carpeta en la ruta de acceso especificada:

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

La ruta de acceso a la carpeta es la ruta de la carpeta relativa al directorio raíz de las páginas para el área especificada. Por ejemplo, la ruta de acceso de la carpeta de los archivos en Areas/Identity/Pages/Manage/ es /Manage.

Para especificar una directiva de autorización, use una sobrecarga AuthorizeAreaFolder:

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

Permitir el acceso anónimo a una página

Use la convención AllowAnonymousToPage a través de AddRazorPagesOptions para agregar un AllowAnonymousFilter a una página en la ruta de acceso especificada:

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 especificada es la ruta del motor de visualización, que es la ruta de acceso relativa de Razor Pages sin extensión y que solo contiene barras diagonales.

Permitir el acceso anónimo a una carpeta de páginas

Use la convención AllowAnonymousToFolder a través de AddRazorPagesOptions para agregar un AllowAnonymousFilter a todas las páginas de una carpeta en la ruta de acceso especificada:

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 especificada es la ruta del motor de visualización, que es la ruta de acceso relativa de Razor Pages.

Nota sobre la combinación de acceso autorizado y anónimo

Es válido especificar que una carpeta de páginas requiere autorización y, a continuación, especificar que una página dentro de esa carpeta permite el acceso anónimo:

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

Sin embargo, el valor inverso no es válido. No se puede declarar una carpeta de páginas para el acceso anónimo y, a continuación, especificar una página dentro de esa carpeta que requiera autorización:

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

Se produce un error al requerir autorización en la página Privada. Cuando tanto AllowAnonymousFilter como AuthorizeFilter se aplican a la página, AllowAnonymousFilter tiene prioridad y controla el acceso.

Recursos adicionales