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?