Нужна помощь / совет с пользовательским классом ASP.NET MVC IAuthorizationFilter - PullRequest
2 голосов
/ 12 сентября 2009

Я пытаюсь создать свой собственный класс атрибутов IAuthorizationFilter. По сути, каждый вызов API имеет параметр строки запроса, который называется 'key' . Затем я собирался украсить любые действия, которые требуют этого, с помощью простого атрибута авторизации.

Я надеялся, что мой метод OnAuthorization(..) просто извлечет значение параметра запроса, если оно было предоставлено. Если это было и это законно, то пользователь авторизован. в противном случае это не так.

Я не уверен, как это сделать в методе OnAuthorization(..).

Или я должен вместо этого использовать IActionFilter?

РЕДАКТИРОВАТЬ: я добавил в некоторый код, чтобы показать, что я делаю ...

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.
}

1 Ответ

2 голосов
/ 12 сентября 2009

Вы должны иметь возможность проверить свойство HttpContext.Request.QueryString параметра AuthorizationContext, переданного методу OnAuthorization.

Чтобы запретить доступ на основе значения значения строки запроса Key, можно установить для свойства Result параметра AuthorizationContext ненулевое значение. При желании это можно установить для экземпляра класса HttpUnauthorizedResult.

...