Fermer

mars 13, 2021

Création de AuthorizeAttribute ASP.NET Core personnalisé


Comment créer un AuthorizeAttribute personnalisé dans ASP.NET Core? Voyons cela ensemble.

Dans ASP.NET Core MVC, l'autorisation est effectuée à l'aide de la classe AuthorizeAttribute . Voici un exemple simple d'utilisation de l'autorisation basée sur les rôles:

 [ Authorize  ( Roles  =   "Admin, Moderator" ) ] 
 public   classe   AdminController  :  Controller
 {
    
} 

Les utilisateurs avec le rôle Admin ou Moderator auront accès aux actions du AdminController .

Bien qu'il n'y ait rien de mal à cela et que cela fasse le travail, la chaîne "Admin, Moderator" – comme vous pouvez l'imaginer – est une bonne recette pour une faute de frappe. Déplaçons donc les noms de rôle vers un ensemble de constantes de chaîne:

 public   static   class   RoleConstants 
 {
     public   const   string  Admin  =   "Admin" ; 
     public   const   string  Moderator  =   "Moderator" ; 
    
} 

Le AdminController devient désormais:

 [ Authorize  ( Roles  =  RoleConstants .  Admin  +  ","  +  RoleConstants .  Moderator ) ] 
 public   class   AdminController  :  Controller
 {
    
} 

Pas idéal, je sais. Malheureusement, nous ne pouvons pas utiliser de chaînes interpolées comme $ "{RoleConstants.Admin}, {RoleConstants.Moderator}" avec des attributs.

C'est un bon exemple d'extension de AuthorizeAttribute ] classe a du sens. Puisque nous essayons de faciliter l'appel à une autorisation basée sur les rôles sur un contrôleur ou une action, créons un AuthorizeByRoleAttribute :













 public   class   AuthorizeByRoleAttribute  :  AuthorizeAttribute
 {
     public   MyAuthorizeAttribute  ( params   string  []  roles ) 
     {
        Rôles  =  Chaîne .  Rejoindre  ( ","  rôles ) ; 
    } 
 } 

Nous pouvons l'utiliser comme suit:

 [ AuthorizeByRole  ( RoleConstants .  Admin  RoleConstants .  Moderator ) ] 
 public   class   AdminController  :  Controller
 {
    
} 

Tant mieux, non?

Si vous venez du framework complet ASP.NET MVC, vous saurez comment il était possible de remplacer les méthodes du AuthorizeAttribute pour ajouter un comportement d'autorisation personnalisé. Vous ne pouvez pas faire cela dans ASP.NET Core. ( Source pour ASP.NET MVC | Source pour ASP.NET Core )

Si vous avez besoin d'un comportement d'autorisation personnalisé, utilisez les stratégies . Barry Dorrans (le «tsar» de la sécurité ASP.NET chez Microsoft) en parle dans un podcast 2017 .NET Rocks aux alentours de 30 minutes — cela vaut la peine d'être écouté si vous êtes intéressé par certains antécédents. [19659079] Conclusion

Personnaliser [Authorize] en l'étendant est assez simple, mais n'a de sens que si vous essayez de rendre le code un peu plus maintenable. Pour un comportement personnalisé vous souhaitez utiliser les stratégies ASP.NET Core à la place.




Source link