Custom MVC AuthorizeAttribute for ASP.NET API Web
j'essaie d'implémenter un attribut d'autorisation personnalisé sur mes contrôleurs D'API Web, mais je suis tombé sur un comportement inattendu.
<Authorize(Users:="myUser")>
Public Function GetTodoItems() As IQueryable(Of TodoItem)
le code ci-dessus fonctionne très bien: il permettra " myUser " pour récupérer les articles, mais personne d'autre n'est autorisé l'accès. Cependant, lorsque j'essaie la même approche avec mon autorisation personnalisée, la totalité de la vérification est ignorée, et tout utilisateur peut accéder à la ressource. Ni le AuthorizeCore
ni le OnAuthorization
les méthodes dépassées dans ma classe dérivée sont appelées.
<MyAuth(Users:="myUser")>
Public Function GetTodoItems() As IQueryable(Of TodoItem)
La classe dérivée hérite de System.Web.Mvc.AuthorizeAttribute
, et le projet est déployé sur IIS, avec Authentification Windows & usurpation d'identité permis , et Authentification Anonyme désactivé.
si j'ajoute la même autorisation personnalisée à un contrôleur MVC, alors cela fonctionne. Mais sur les Controllers API, rien. Si l'attribut Authorize
n'avait pas fonctionné non plus, il aurait eu plus de sens. Ai-je raté quelque chose? Est-ce un comportement attendu, ou un bug dans la Beta?
2 réponses
vous devez utiliser System.Web.Http.AuthorizeAttribute
du système.Web.Http.dll pour API Web au lieu de System.Web.Mvc.AuthorizeAttribute
.
C'est-à-dire, parce que namespace System.Web.Http.AuthorizeAttribute
est dérivé de AuthorizationFilterAttribute
. Les filtres sont gérés automatiquement par L'API Web. Dans ma propre implémentation, j'ai dérivé directement de AuthorizationFilterAttribute
pour gérer l'authentification HTTP de base.
j'ai construit ma propre implémentation personnalisée pour L'autorisation de base:
http://remy.supertext.ch/2012/04/basic-http-authorization-for-web-api-in-mvc-4-beta /
peut-être que ça aide.