ActionFilterAttribute用于授权

时间:2012-09-27 23:05:19

标签: asp.net-mvc-3 security authorization action-filter

我需要在我的应用程序中实现一些授权机制。授权基于从客户端发送到服务器的对象。控制器中的每个操作都作为参数列表。基于此列表中对象的嵌套属性,我必须授予或拒绝对控制器操作的访问权限。我的第一种方法是使用自定义过滤器属性

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

    }
}

问题是这是否是授权的好方法?也许在行动中检查授权会更好吗?

1 个答案:

答案 0 :(得分:0)

安全性是cross cutting concern,因此过滤器和属性是理想的选择。必须在每个操作中手动检查它会增加许多必须维护的额外代码,如果忘记它会增加安全风险。使其成为全局过滤器将意味着它将始终被应用,这意味着您可以编写一个属性,如果他们不需要动作/控制器可能会豁免它,例如AllowAnnoymous等enter link description here

我找到的关于MVC3安全性的最佳一般性文章是http://www.codeproject.com/Articles/288631/Secure-ASP-NET-MVC3-applications