4

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

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

    }
}

问题是这是否是授权的好解决方案?也许检查动作内部的授权会更好?

4

1 回答 1

1

安全性是一个横切关注点,因此过滤器和属性是它的理想场所。必须在每个操作中手动检查它会增加许多必须维护的额外代码,如果忘记它会增加安全风险。将其设为全局过滤器意味着它将始终被应用,这意味着您可以编写一个属性,如果他们不需要它,可能会免除一个动作/控制器,例如 AllowAnnoymous 等,请在此处输入链接描述

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

于 2012-09-27T23:49:28.807 回答