tutorial net espaƱol asp c# asp.net-core asp.net-core-mvc asp.net-core-webapi

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?