2009-09-12 7 views
2

J'essaie de créer ma propre classe d'attributs IAuthorizationFilter. Fondamentalement, chaque appel API a un paramètre de chaîne de requête appelé 'clé'. J'allais ensuite décorer toutes les actions qui en ont besoin, avec l'attribut d'autorisation simple.Besoin d'aide/conseil avec une classe ASP.NET MVC IAuthorizationFilter personnalisée

J'espérais que ma méthode OnAuthorization(..) extrairait juste la valeur du paramètre de requête, si elle était fournie. Si c'était le cas, et c'est légitime, alors l'utilisateur est autorisé. sinon, ils ne le sont pas.

Je ne sais pas comment faire cela dans la méthode OnAuthorization(..).

Ou devrais-je utiliser un IActionFilter à la place?

EDIT: J'ai ajouté dans un code pour montrer ce que je fais ...

public void OnAuthorization(AuthorizationContext filterContext) 
{ 
    if (filterContext == null) 
    { 
     throw new ArgumentNullException("filterContext"); 
    } 

    ApiKey apiKey = null; 
    string queryStringKey = filterContext.HttpContext.Request.QueryString["key"]; 
    if (!string.IsNullOrEmpty(queryStringKey)) 
    { 
     apiKey = GetApiKey(queryStringKey); // Custom code that checks a dictionary. 
    } 

    // Do we have a key? 
    if (apiKey == null) 
    { 
     filterContext.Result = new HttpUnauthorizedResult(); 
    } 

    // TODO: Is this key allowed for this domain? 

    // All is good, so don't do anything else. 
} 

Répondre

2

Vous devriez être en mesure d'inspecter la propriété HttpContext.Request.QueryString du paramètre AuthorizationContext passé à la Méthode OnAuthorization Pour refuser l'accès en fonction de la valeur de la valeur de la chaîne de requête de clé, vous pouvez définir la propriété Résultat du paramètre AuthorizationContext sur une valeur non nulle. Cela peut, si vous le souhaitez, être défini sur une instance de la classe HttpUnauthorizedResult.

+0

Que dois-je faire pour dire que ce n'est pas autorisé? filterContext.Result = new HttpUnauthorizedResult(); sinon, tout garder par défaut? –

+0

@ Pure.Krome: voir ma modification sur ce post. –

+0

Donc, si la valeur de la propriété Result est non nulle, alors ils sont refusés. Où est-ce vérifié/manipulé? –

Questions connexes