Autorización simple en ASP.NET Core
La autorización ASP.NET Core se controla con AuthorizeAttribute y sus distintos parámetros. En su forma más básica, la aplicación del atributo a un controlador, una acción o una página limita el acceso a los usuarios autenticados [Authorize] Razor por ese componente.
El código siguiente limita el acceso a AccountController a los usuarios autenticados:
[Authorize]
public class AccountController : Controller
{
public ActionResult Login()
{
}
public ActionResult Logout()
{
}
}
Si desea aplicar la autorización a una acción en lugar del controlador, aplique el AuthorizeAttribute atributo a la propia acción:
public class AccountController : Controller
{
public ActionResult Login()
{
}
[Authorize]
public ActionResult Logout()
{
}
}
Ahora solo los usuarios autenticados pueden acceder a la Logout función.
También puede usar el atributo para permitir el acceso de AllowAnonymous usuarios no autenticados a acciones individuales. Por ejemplo:
[Authorize]
public class AccountController : Controller
{
[AllowAnonymous]
public ActionResult Login()
{
}
public ActionResult Logout()
{
}
}
Esto permitiría solo a los usuarios autenticados en , excepto para la acción , a la que pueden acceder todos los usuarios, independientemente de su estado autenticado, no autenticado AccountController Login o anónimo.
Advertencia
[AllowAnonymous] omite todas las instrucciones de autorización. Si combina y [AllowAnonymous] cualquier [Authorize] atributo, se [Authorize] omiten los atributos. Por ejemplo, si aplica en el nivel de controlador, se omiten los atributos del mismo controlador (o en cualquier acción [AllowAnonymous] [Authorize] dentro de él).
El código siguiente limita el acceso a LogoutModel Razor la página a los usuarios autenticados:
[Authorize]
public class LogoutModel : PageModel
{
public async Task OnGetAsync()
{
}
public async Task<IActionResult> OnPostAsync()
{
}
}
Para obtener información sobre cómo requerir globalmente la autenticación de todos los usuarios, vea Requerir usuarios autenticados.
Autorización de atributos y Razor Pages
No AuthorizeAttribute se puede aplicar a los Razor controladores page. Por ejemplo, [Authorize] no se puede aplicar a , ni a ningún otro controlador de OnGet OnPost página. Considere la posibilidad de usar un ASP.NET Core MVC para páginas con requisitos de autorización diferentes para distintos controladores. Uso de un controlador MVC cuando se requieren requisitos de autorización diferentes:
- Es el enfoque menos complejo.
- Es el enfoque recomendado por Microsoft.
Si decide no usar un controlador MVC, se pueden usar los dos enfoques siguientes para aplicar la autorización a los métodos Razor de controlador de página:
- Use páginas independientes para los controladores de página que requieran una autorización diferente. Mueva el contenido compartido a una o varias vistas parciales. Cuando sea posible, este es el enfoque recomendado.
- Para el contenido que debe compartir una página común, escriba un filtro que realice la autorización como parte de IAsyncPageFilter.OnPageHandlerSelectionAsync. El proyecto pageHandlerAuth GitHub muestra este enfoque:
AuthorizeIndexPageHandlerFilter implementa el filtro de autorización:[!code-csharp]
El atributo [AuthorizePageHandler] se aplica al controlador
OnGetde página: [!code-csharp]
Advertencia
El enfoque de ejemplo PageHandlerAuth no :
- Cree con atributos de autorización aplicados a la página, el modelo de página o globalmente. La composición de atributos de autorización da lugar a que la autenticación y la autorización se ejecuten varias veces cuando hay una o varias instancias de o
AuthorizeAttributeque también se aplican a laAuthorizeFilterpágina. - Trabaje junto con el resto de los ASP.NET Core autenticación y autorización. Debe comprobar que el uso de este enfoque funciona correctamente para la aplicación.
No hay ningún plan para admitir los AuthorizeAttribute controladores en Razor page.