net - web api rest c#
Atributo de autorización personalizado en.NET Core (1)
La solución sugerida por @JoeAudette parece ser la mejor opción.
Crea tu propia política en Startup.cs :
options.AddPolicy("PolicyName", p =>
{
p.RequireAuthenticatedUser();
p.RequireClaim("IsAdmin", true); <- your criteria here (claim type, claim value) ???
p.Build();
});
Entonces solo úsalo como un atributo:
[Authorize("PolicyName")]
Esta pregunta ya tiene una respuesta aquí:
Estoy construyendo una API en .NET Core 1.1. Construyo un objeto User personalizado desde HttpContext.User en un controlador base del que todos mis otros controladores heredan, y tengo la autenticación habilitada por defecto (debe ser deshabilitada manualmente con [AllowAnonymous] cuando sea necesario). El objeto User tiene una propiedad IsAdmin . En este momento estoy comprobando si el usuario es un administrador en la parte superior de cada función relevante como a continuación, pero siento que debe haber una manera de agregar un atributo personalizado para simplificar y limpiar este código.
Como referencia, User.IsAdmin es una abreviatura de esto:
bool.Parse(HttpContext.User.FindFirst("IsAdmin")?.Value)
En lugar de esto:
[HttpGet]
public async Task<IActionResult> Get()
{
if (!User.IsAdmin)
return Forbid();
// logic
}
Me gustaría esto (o algo similar):
[AdminOnly]
[HttpGet]
public async Task<IActionResult> Get()
{
// logic
}
Traté de buscar en la fuente de [AuthorizeAttribute] para intentar construir desde, pero es solo un shell y no sé dónde ocurre la verdadera magia.
¿Cómo puedo lograr esto?