Frage

Ich versuche, meine eigene IAuthorizationFilter Attributklasse zu machen. Grundsätzlich jeder API-Aufruf hat einen Query-String-Parameter namens 'Schlüssel' . Ich wollte dann alle Aktionen dekoriert, die dies erfordern, mit dem einfachen Berechtigungsattribut.

Ich habe gehofft, meine OnAuthorization(..) Methode wird dann nur den Wert der Abfrage-Parameter extrahieren, wenn sie zur Verfügung gestellt wurde. Wenn es war, und es ist echt ist, dann wird der Benutzer autorisiert. andernfalls sind sie nicht.

Ich bin mir nicht sicher, wie dies in der OnAuthorization(..) Methode zu tun.

Oder soll ich eine IActionFilter stattdessen verwenden?

EDIT: Ich habe in einigen Code hinzugefügt um zu zeigen, was ich tue ...

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.
}
War es hilfreich?

Lösung

Sie sollten die HttpContext.Request.QueryString Eigenschaft des AuthorizationContext Parameter an die OnAuthorization Methode übergeben inspizieren können.

Zugriff verweigern auf dem Wert des Key querstring Wert basiert, können Sie das Ergebnis Eigenschaft des AuthorizationContext Parameter auf einen Wert ungleich Null gesetzt. Dies kann, wenn Sie möchten, auf eine Instanz der Klasse HttpUnauthorizedResult eingestellt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top