Atsortingbut Authorize dans ASP.NET MVC

J’ai du mal à comprendre l’utilisation réelle de l’atsortingbut [Authorize] dans ASP.NET MVC. Selon le concept, si nous décorons une méthode de contrôleur avec l’atsortingbut [Authorize] , seuls les utilisateurs authentifiés sont autorisés à accéder aux contrôleurs.

J’ai développé une application ASP.NET MVC sans décorer de contrôleurs avec l’atsortingbut [Authorize] . Ce que j’ai observé, c’est que si j’implémente correctement le mécanisme d’authentification dans mon application à l’aide de web.config ou d’une autre manière, je peux maintenant accéder à l’URL {controller}/{action}/{id} d’une méthode d’action particulière.

Le système demande toujours une connexion. Cela signifie que mes contrôleurs sont sécurisés. Ma question est la suivante: quand je peux sécuriser mes contrôleurs sans utiliser l’atsortingbut [Authorize] , alors quel est le besoin réel?

Le véritable pouvoir est associé à la compréhension et à la mise en œuvre d’un fournisseur d’appartenance avec le fournisseur de rôles. Vous pouvez affecter des utilisateurs à des rôles et, en fonction de cette ressortingction, vous pouvez appliquer différents rôles d’access pour différentes actions d’utilisateur à contrôleur ou contrôleur lui-même.

  [Authorize(Users = "Betty, Johnny")] public ActionResult SpecificUserOnly() { return View(); } 

ou vous pouvez restreindre selon le groupe

 [Authorize(Roles = "Admin, Super User")] public ActionResult AdministratorsOnly() { return View(); } 

L’utilisation des atsortingbuts [Authorize] peut aider à prévenir les failles de sécurité dans votre application. La manière dont MVC gère les URL (en les acheminant vers un contrôleur plutôt que vers un fichier réel) rend difficile la sécurisation de tout via le fichier web.config.

Lisez plus ici: http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4-app-and-the-new-allowanonymous-atsortingbute. aspx

Il existe parce qu’il est plus pratique à utiliser, il s’agit également d’une idéologie complètement différente utilisant des atsortingbuts pour marquer les parameters d’autorisation plutôt que la configuration XML. Il ne s’agissait pas de battre la configuration générale ou toute autre structure d’autorisation, juste la manière de faire de MVC. Je dis cela, car il semble que vous recherchiez une caractéristique technique qui présente des avantages qui ne sont probablement pas une simple commodité.

BobRock a déjà énuméré les avantages. Juste pour append à sa réponse, d’autres scénarios sont que vous pouvez appliquer cet atsortingbut à tout le contrôleur, pas seulement aux actions, vous pouvez également append différents parameters d’autorisation de rôle à différentes actions dans un même contrôleur pour les mélanger et les faire correspondre.

L’utilisation de l’atsortingbut Authorize semble plus pratique et se veut plus “MVC”. En ce qui concerne les avantages techniques, il y en a.

Un scénario qui me vient à l’esprit est lorsque vous utilisez la mise en cache de sortie dans votre application. Les atsortingbuts d’autorisation gèrent bien cela.

Une autre serait l’extensibilité. L’atsortingbut Authorize est simplement un filtre standard, mais vous pouvez remplacer ses méthodes et effectuer des actions de pré-autorisation telles que la journalisation, etc. Je ne suis pas sûr de savoir comment procéder via la configuration.

Un avantage est que vous comstackz l’access à l’application, de sorte qu’il ne peut pas être modifié accidentellement par une personne modifiant le Web.config.

Cela peut ne pas être un avantage pour vous et peut être un inconvénient. Mais pour certains types d’access, cela peut être préférable.

De plus, je trouve que les informations d’autorisation contenues dans le fichier Web.config le polluent et le rendent plus difficile à trouver. Donc, à certains égards, sa préférence, dans d’autres il n’y a pas d’autre moyen de le faire.

La balise dans web.config est basée sur des chemins, tandis que MVC fonctionne avec des actions et des routes de contrôleur.

Il s’agit d’une décision architecturale qui peut ne pas faire beaucoup de différence si vous voulez simplement empêcher les utilisateurs qui ne sont pas connectés mais qui font une grande différence lorsque vous essayez d’appliquer une autorisation basée sur des rôles et types de non autorisés.

Le premier cas est couvert par la réponse de BobRock.

L’utilisateur doit avoir au moins l’un des rôles suivants pour accéder au contrôleur ou à l’action

 [Authorize(Roles = "Admin, Super User")] 

L’utilisateur doit avoir ces deux rôles pour pouvoir accéder au contrôleur ou à l’action.

 [Authorize(Roles = "Super User")] [Authorize(Roles = "Admin")] 

L’utilisateur que peut accéder au contrôleur ou à l’action sont Betty et Johnny

 [Authorize(Users = "Betty, Johnny")] 

Dans ASP.NET Core, vous pouvez utiliser les principes des revendications et des règles pour obtenir une autorisation via [Authorize] .

 options.AddPolicy("ElevatedRights", policy => policy.RequireRole("Administrator", "PowerUser", "BackupAdministrator")); [Authorize(Policy = "ElevatedRights")] 

La seconde est très utile dans les applications plus importantes où il peut être nécessaire d’implémenter une autorisation avec des ressortingctions, des processus et une gestion différents selon le cas. Pour cette raison, nous pouvons étendre le AuthorizeAtsortingbute et implémenter différentes alternatives d’autorisation pour notre projet.

 public class CustomAuthorizeAtsortingbute: AuthorizeAtsortingbute { public override voidOnAuthorization(AuthorizationContextfilterContext) { } } 

La manière ” correcte-accomplie ” de faire l’autorisation dans ASP.NET MVC utilise l’atsortingbut [Authorize] .