Utilisation de l'autorisation personnalisée dans MVC 4
Je suis en train de développer une API Web à l'aide de la MVC 4 web API type de projet. Je suis actuellement à un stade où j'ai besoin d'ajouter un peu de sécurité à l'API. Je suis conscient de l'Autoriser attribut, cependant, le client préfère une approche différente.
Pour cela, j'ai essayé de remplacer les Autoriser attribut dans ma propre classe et qu'une base de départ, j'ai tout simplement avoir le AuthorizeCore retourne toujours false, ce qui signifie pas authentifié. Si je puis ajouter à une Action au sein d'un contrôleur, l'action se termine toujours et j'ai toujours récupérer les données.
Je crois que la raison peut être due à l'attribut personnalisé n'étant pas inscrit dans le web.fichier de config, cependant, je ne sais pas comment aller à ce sujet lorsque vous n'utilisez pas l'authentification par formulaires.
Le code que j'utilise est un test frais MVC 4 web API projet avec l'attribut personnalisé illustré ci-dessous.
public class Auth : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return false;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectResult("http://www.google.com");
}
}
J'ai ensuite ajouté l'attribut sur la méthode Get de la valeur par défaut ValuesController en tant que tel
[Auth]
public IEnumerable<string> Get()
Cependant, lorsque je navigue de domaine/api/Valeurs je suis toujours présentées avec les données à la place de l'rediriger vers google. Toute aide est appréciée.
Edit: Après en cherchant un peu plus j'ai trouvé ça ici: http://weblogs.asp.net/jgalloway/archive/2012/05/04/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way.aspx Cela donne à penser que j'ai mal choisi le mauvais AuthorizeAttribute classe que j'avais choisi celui de Système.Web.MVC plutôt que celui de Système.Web.Http. Il semble que la version du protocole Http ne permet pas le même niveau de configuration, comme le MVC version qu'il ne m'autorise pas à remplacer la AuthorizeCore. Plus de l'aide sur ce qui est apprécié.
source d'informationauteur bruinbrown | 2012-10-14
Vous devez vous connecter pour publier un commentaire.
Il semble que le problème a été causé par l'utilisation de la mauvaise version de AuthorizeAttribute. Après l'utilisation de la version dans le Système.Web.Http le code renvoie le code d'erreur approprié si l'utilisateur a pas les autorisations requises. Pour exemple, voici le code équivalent à ce que j'ai mis dans la question d'origine
Pour WebApi vous pouvez le forcer à remplacer le bon AuthorizeAttribute classe, en le précisant dans le remplacement. Aussi, il n'est pas judicieux de faire une redirection, cela renvoie simplement la non autorisée sur le web, ce qui est le propre d'une API.