2012-09-27 26 views
3

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

    } 
} 

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

回答

0

安全性是cross cutting concern,所以过滤器和属性是它的理想场所。不得不在每次操作中手动检查它,都会增加很多额外的代码,这些代码必须被维护,并且如果被遗忘,会增加安全风险。使其成为一个全局过滤器意味着它将始终被应用,这意味着你可以编写一个属性,如果他们不需要它,可能会豁免一个Action/Controller。 AllowAnnoymous等enter link description here

关于安全的最好的一般性文章我发现MVC3是这一个http://www.codeproject.com/Articles/288631/Secure-ASP-NET-MVC3-applications