78 votes

MVC5 Revendications version de l'Autoriser attribut

Je suis d'essayer certaines des choses nouvelles dans VS2013 RC avec MVC5 et la nouvelle OWIN authentification middleware.

Donc, je suis habitué à l'utilisation de l' [Authorize] attribut de limiter les actions par rôle, mais je suis en train d'utiliser et de réclamations basées sur l'activité de l'autorisation, et je ne peux pas trouver un équivalent de l'attribut pour elle.

Est-il évident que je suis absent ou dois-je roule mes propres? J'ai un peu attendu pour être l'un de la boîte.

Ce que je recherche plus précisément, c'est quelque chose le long des lignes de [Authorize("ClaimType","ClaimValue")] , je suppose.

Merci à l'avance.

Mise à JOUR J'ai fini par écrire un attribut simple à gérer. Je ne pouvais pas trouver quoi que ce soit dans le cadre de la sortie de la boîte sans un paquet supplémentaire de config. Énumérés ci-dessous.

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 = HttpContext.Current.User as ClaimsPrincipal;
        if (user.HasClaim(claimType, claimValue))
        {
            base.OnAuthorization(filterContext);
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
}

Bien sûr, vous pouvez supprimer le type et la valeur params si vous étiez heureux d'utiliser le contrôleur de l'action des verbes en-triplet pour les réclamations en quelque sorte.

30voto

leastprivilege Points 4949
  1. Vous ne voudriez pas vérifier les réclamations en particulier, mais plutôt pour l'action/ressources paires. Le facteur de la demande / des vérifications des données dans un gestionnaire d'autorisation. La séparation des préoccupations.
  2. MVC et ClaimsPrincipalPermission n'est pas un bon match. Il jette un SecurityException et n'est pas l'unité de test amical.

Ma version est ici: http://leastprivilege.com/2012/10/26/using-claims-based-authorization-in-mvc-and-web-api/

3voto

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

ClaimsPrincipalPermissionAttribute Classe

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X