Domanda

Sto cercando di creare la mia classe di attributo IAuthorizationFilter . Fondamentalmente, ogni chiamata api ha un parametro della stringa di query chiamato 'chiave' . Stavo per decorare tutte le azioni che lo richiedono, con il semplice attributo di autorizzazione.

Speravo che il mio metodo OnAuthorization (..) estrasse il valore del parametro di query, se fornito. Se lo era, ed è legittimo, l'utente è autorizzato. in caso contrario, non lo sono.

Non sono sicuro di come farlo nel metodo OnAuthorization (..) .

O dovrei usare un IActionFilter invece?

EDIT: ho aggiunto del codice per mostrare cosa sto facendo ...

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.
}
È stato utile?

Soluzione

Dovresti essere in grado di ispezionare la proprietà HttpContext.Request.QueryString del parametro AuthorizationContext passato al metodo OnAuthorization.

Per negare l'accesso in base al valore del valore Querstring chiave, è possibile impostare la proprietà Result del parametro AuthorizationContext su un valore non nullo. Se lo si desidera, questo può essere impostato su un'istanza della classe HttpUnauthorizedResult.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top