Нужна помощь / совет с пользовательским классом ASP.NET MVC IAuthorizationFilter

StackOverflow https://stackoverflow.com/questions/1414316

Вопрос

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

Я надеялся, что мой метод 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.
}
Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top