authentification et autorisation ASP.NET MVC 5

Asp.net MVC 5 semble avoir laissé derrière lui l'utilisation de la classe AuthorizeAttribute où vous pourriez créer un attribut d'autorisation personnalisé en mettant en œuvre la classe AuthorizeAttribute, outrepasser ses méthodes et cacher la propriété SiteRole incase que vous vouliez faire cuire dans vos propres rôles. Tous les exemples que j'ai vus suggèrent D'utiliser OWIN ou le cadre d'identité. Est-ce que ce sont les deux seules façons de faire l'authentification et l'autorisation dans la nouvelle ASP.Net cadre?. Vais-je rater quelque chose si je ne de la bonne vieille façon? Je ne veux pas que le cadre crée toutes les tables d'utilisateur et de rôle pour moi. Que faire si je veux ajouter un utilisateur existant et table de rôle à une nouvelle application?

Je ne vois pas encore le besoin d'intégration sociale dans chaque application et je ne pense pas que j'en aurai besoin immédiatement. Est-il un article qui explique le départ avec un minimum à l'aide d'un custom autoriser l'attribut, puis d'ajouter les nouvelles fonctionnalités d'authentification. Je vous voulez quelque chose qui explique essentiellement tout le désordre dans un projet nouvellement créé sans authentification D'utilisateur individuel ou D'authentification sélectionnée.

23
demandé sur John Saunders 2014-01-02 15:02:01

2 réponses

vous pouvez encore personnaliser L'AuthorizeAttribute dans MVC 5 en utilisant ASP.NET identité. Il est un exemple de cela dans le Projet De Sécurité Simple. voici un attribut D'autorisation personnalisé que vous pouvez utiliser pour les controllers et voici l'AuthorizeAttribute personnalisé que vous pouvez utiliser pour. Le concept derrière ces attribut D'AuthorizeAttributes personnalisées est découplez votre modèle de sécurité de votre modèle d'application dont il est question ici. Celui de L'API Web est aussi prend en charge l'authentification de base.

le pipeline de sécurité a changé avec L'introduction D'OWIN et j'ai rencontré quelques problèmes avec le comportement de AuthorizeAttribute pour les API Web, qui est discutés ici.

vous trouverez également des exemples dans le projet SimpleSecurity sur le portage de L'ancien fournisseur d'abonnement appelé SimpleMembership vers MVC 5. Certains de l' problèmes avec le processus de mise à niveau discuté ici. Je l'ai fait fonctionner pour que vous puissiez suivre l'implémentation de l'ancien fournisseur d'adhésion. Mais ma recommandation serait d'aller avec le ASP.NET identité comme C'est la voie à suivre que Microsoft va prendre en charge, C'est une architecture plus flexible, et il élimine beaucoup de la les problèmes trouvés dans les anciennes implémentations de fournisseur d'appartenances.

23
répondu Kevin Junghans 2014-01-02 15:28:45

Ben Foster a une série de deux parties qui vous emmène à travers les étapes de mise en œuvre de l'authentification basée sur les cookies avec ASP.NET Identity from the ground up, starting off with a new Web app with no authentication selected. Suivez "ASP.NET identité dépouillée"Partie 1 et Partie 2.

Utilisez L'attribut Autoriser suivant pour gérer l'accès non autorisé lorsque l'utilisateur est déjà authentifié.

public class LoggedOrAuthorizedAttribute : AuthorizeAttribute 
{ 
   public LoggedOrAuthorizedAttribute() 
    { 
       View = "error"; 
       Master = String.Empty; 
    } 

    public String View { get; set; } 
    public String Master { get; set; } 

public override void OnAuthorization(AuthorizationContext filterContext) 
{ 
  base.OnAuthorization(filterContext); 
  CheckIfUserIsAuthenticated(filterContext); 
} 

   private void CheckIfUserIsAuthenticated(AuthorizationContext filterContext) 
{ 
   // If Result is null, we’re OK: the user is authenticated and authorized. 
   if (filterContext.Result == null) 
      return; 

   // If here, you’re getting an HTTP 401 status code. In particular,
   // filterContext.Result is of HttpUnauthorizedResult type. Check Ajax      here. 
   if (filterContext.HttpContext.User.Identity.IsAuthenticated) 
    { 
      if (String.IsNullOrEmpty(View)) 
         return; 
      var result = new ViewResult {ViewName = View, MasterName = Master}; 
      filterContext.Result = result; 
   } 
 }
}
1
répondu Mxo 2016-06-21 13:44:26