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

Una manera de controlar el acceso en la Razor aplicación Pages es usar convenciones de autorización en el inicio. Estas convenciones permiten autorizar a los usuarios y permitir que 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 cookie la autenticación 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 AuthorizePage convención para agregar un elemento a la página en la ruta de acceso AuthorizeFilter especificada:

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

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

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

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

Nota

se AuthorizeFilter puede aplicar a una clase de modelo de página con el atributo [Authorize] filter. Para obtener más información, vea Authorize filter attribute.

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

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

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

La ruta de acceso especificada es la ruta de acceso del motor de vistas, que es la Razor ruta de acceso relativa raíz de 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 AuthorizeAreaPage convención para agregar un elemento a la página de área en la ruta de acceso AuthorizeFilter 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 AuthorizeAreaPage:

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

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

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

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

La ruta de acceso de la carpeta es la ruta de acceso de la carpeta relativa al directorio raíz de páginas para el área especificada. Por ejemplo, la ruta de acceso de la carpeta para los archivos en Áreas/ Identity /Pages/Administrar/ 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 AllowAnonymousToPage convención para agregar un elemento a una página en la ruta de acceso AllowAnonymousFilter especificada:

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

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

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

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

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

La ruta de acceso especificada es la ruta de acceso del motor de vistas, que es la Razor ruta de acceso relativa raíz de 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, lo contrario no es válido. No 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 Privado. Cuando y AllowAnonymousFilter se aplican a la AuthorizeFilter página, tiene prioridad y controla el AllowAnonymousFilter acceso.

Recursos adicionales

Una manera de controlar el acceso en la Razor aplicación Pages es usar convenciones de autorización en el inicio. Estas convenciones permiten autorizar a los usuarios y permitir que 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 cookie la autenticación 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 AuthorizePage convención a través de para agregar un elemento a la página en la ruta de acceso AddRazorPagesOptions AuthorizeFilter 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 de acceso especificada es la ruta de acceso del motor de vistas, que es la ruta de acceso relativa raíz de Pages sin una extensión y que solo Razor contiene barras diagonales.

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

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

Nota

se AuthorizeFilter puede aplicar a una clase de modelo de página con el atributo [Authorize] filter. Para obtener más información, vea Authorize filter attribute.

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

Use la AuthorizeFolder convención via para agregar un a todas las páginas de una carpeta en la ruta de acceso AddRazorPagesOptions AuthorizeFilter 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 de acceso especificada es la ruta de acceso del motor de vistas, que es la Razor ruta de acceso relativa raíz de 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 AuthorizeAreaPage convención a través de para agregar un elemento a la página de área en la ruta de AddRazorPagesOptions acceso AuthorizeFilter 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 AuthorizeAreaPage:

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

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

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

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

La ruta de acceso de la carpeta es la ruta de acceso de la carpeta relativa al directorio raíz de páginas para el área especificada. Por ejemplo, la ruta de acceso de la carpeta para los archivos en Áreas/ Identity /Pages/Administrar/ 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 AllowAnonymousToPage convención a través de para agregar un a una página en la ruta de acceso AddRazorPagesOptions AllowAnonymousFilter 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 de acceso especificada es la ruta de acceso del motor de vistas, que es la ruta de acceso relativa raíz de Pages sin una extensión y que solo Razor contiene barras diagonales.

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

Use la AllowAnonymousToFolder convención via para agregar un a todas las páginas de una carpeta en la ruta de acceso AddRazorPagesOptions AllowAnonymousFilter 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 de acceso especificada es la ruta de acceso del motor de vistas, que es la Razor ruta de acceso relativa raíz de Pages.

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

Es válido especificar que una carpeta de páginas que requiera autorización y que especifique que una página dentro de esa carpeta permita el acceso anónimo:

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

Sin embargo, lo contrario no es válido. No 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 Privado. Cuando y AllowAnonymousFilter se aplican a la AuthorizeFilter página, tiene prioridad y controla el AllowAnonymousFilter acceso.

Recursos adicionales