tag route parameter page net mvc from form data asp all asp.net-mvc asp.net-mvc-5 claims

asp.net mvc - route - MVC5 versión de reclamaciones del atributo Autorizar



tag helper asp net core 2 (4)

Estoy probando algunas de las cosas nuevas en VS2013 RC con MVC5 y el nuevo middleware de autenticación OWIN.

Por lo tanto, estoy acostumbrado a usar el atributo [Authorize] para limitar las acciones por rol, pero estoy tratando de usar declaraciones / actividad basada en la autorización, y no puedo encontrar un atributo equivalente para él.

¿Hay uno obvio que me falta o tengo que hacer el mío? Esperaba que hubiera una fuera de la caja.

Lo que estoy buscando específicamente es algo parecido a [Authorize("ClaimType","ClaimValue")] Supongo.

Gracias por adelantado.


  1. No verificará las reclamaciones específicamente, sino más bien los pares de acción / recurso. Factorizar las comprobaciones reales de reclamos / datos en un administrador de autorizaciones. Separación de intereses.
  2. MVC y ClaimsPrincipalPermission no son una buena combinación. Lanza una SecurityException y no es amigable para pruebas unitarias.

Mi versión está aquí: http://leastprivilege.com/2012/10/26/using-claims-based-authorization-in-mvc-and-web-api/


Descubrí que todavía puede usar el atributo Autorización con roles y usuarios, con reclamos.
Para que esto funcione, su ClaimsIdentity debe incluir 2 tipos de reclamos específicos:

ClaimTypes.Name

y

ClaimTypes.Role

Luego, en su clase derivada de OAuthAuthorizationServerProvider, en los métodos GrantXX que utiliza, cuando crea su ClaimsIdentity, agregue estas 2 afirmaciones.

Ejemplo:

var oAuthIdentity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, context.ClientId), new Claim(ClaimTypes.Role, "Admin"), }, OAuthDefaults.AuthenticationType);

Luego, en cualquier acción, puede usar [Authorize(Roles ="Admin")] para restringir el acceso.


Terminé simplemente escribiendo un atributo simple para manejarlo. No pude encontrar nada en el marco de la caja sin un montón de configuraciones adicionales. Listado a continuación.

public class ClaimsAuthorizeAttribute : AuthorizeAttribute { private string claimType; private string claimValue; public ClaimsAuthorizeAttribute(string type, string value) { this.claimType = type; this.claimValue = value; } public override void OnAuthorization(AuthorizationContext filterContext) { var user = filterContext.HttpContext.User as ClaimsPrincipal; if (user != null && user.HasClaim(claimType, claimValue)) { base.OnAuthorization(filterContext); } else { base.HandleUnauthorizedRequest(filterContext); } } }

Por supuesto, podría eliminar los parámetros tipo y valor si estuviera contento de usar el triplete controlador-acción-verbo para las afirmaciones de alguna manera.


[ClaimsPrincipalPermission(SecurityAction.Demand, Operation="Delete", Resource="Customer")] public ActionResult Delete(int id) { _customer.Delete(id); return RedirectToAction("CustomerList"); }

ClaimsPrincipalPermissionAttribute Class