ActionFilterAttribute для авторизации

Мне нужно реализовать некоторый механизм авторизации в моем приложении. Авторизация основана на объекте, который отправляется от клиента к серверу. Каждое действие в контроллере принимается как список аргументов. На основе вложенных свойств объектов в этом списке я должен предоставить или запретить доступ к действию контроллера. Мой первый подход заключался в использовании пользовательского атрибута фильтра

public class CustomAuthAttribute : FilterAttribute,IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        //SOME LOGIC HERE
    }
}

Однако из-за того, что запрос является запросом json, мне сложно получить значения каждого соответствующего свойства отправленных объектов (у меня есть доступ только к значениям json). Вот почему я подумал, что могу использовать ActionFilterAttribute вместо FilterAttribute.

 public class ActionFilterAuthorization: ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        var castedList = filterContext.ActionParameters["key"] as List<MyObject>;
        //logic here 

       //throw exception is access is not granted

    }
}

Вопрос в том, является ли это хорошим решением для авторизации? Может быть лучше проверить авторизацию внутри действий??


person John    schedule 27.09.2012    source источник


Ответы (1)


Безопасность — это сквозная забота, поэтому фильтры и атрибуты идеально подходят для этого. . Необходимость проверять его вручную при каждом действии добавила бы много лишнего кода, который необходимо было поддерживать, и увеличила бы риск безопасности, если бы он был забыт. Если сделать его глобальным фильтром, это будет означать, что он будет применяться всегда, что означает, что вы можете написать атрибут, который, возможно, освобождает действие/контроллер, если он им не нужен, например. AllowAnnoymous и т. д. >введите здесь описание ссылки.

Лучшая общая статья о безопасности, которую я нашел для MVC3, это http://www.codeproject.com/Articles/288631/Secure-ASP-NET-MVC3-applications

person GraemeMiller    schedule 27.09.2012