Question

J'essaie de créer ma propre classe d'attributs IAuthorizationFilter . Fondamentalement, chaque appel d'api a un paramètre de chaîne de requête appelé 'clé' . J'allais ensuite décorer les actions qui le nécessitent, avec l'attribut d'autorisation simple.

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

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

Ou devrais-je utiliser un IActionFilter à la place?

EDIT: j'ai ajouté du 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.
}
Était-ce utile?

La solution

Vous devriez pouvoir examiner la propriété HttpContext.Request.QueryString du paramètre AuthorizationContext transmis à la méthode OnAuthorization.

Pour refuser l'accès en fonction de la valeur de la valeur de la chaîne de requête clé, vous pouvez affecter à la propriété Result du paramètre AuthorizationContext une valeur non NULL. Cela peut, si vous le souhaitez, être défini sur une instance de la classe HttpUnauthorizedResult.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top