我需要在我的应用程序中实现一些授权机制。授权是基于对象的,这些对象从客户端发送到服务器。控制器中的每个操作都作为一个参数列表。根据此列表中对象的嵌套属性,我必须授予或拒绝对控制器操作的访问权限。我的第一种方法是使用自定义筛选器属性
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
}
}
问题是这是否是授权的好解决方案?也许检查操作内部的授权会更好??
发布于 2012-09-27 23:49:29
安全性是一个cross cutting concern,所以过滤器和属性是它的理想位置。在每次操作中都必须手动检查它,这将添加许多必须维护的额外代码,并且如果忘记它,还会增加安全风险。将其设置为全局筛选器将意味着它将始终被应用,这意味着您可以编写一个属性,如果操作/控制器不需要它,您可以编写一个属性,例如AllowAnnoymous等enter link description here。
我找到的关于MVC3安全性的最好的通用文章是this one http://www.codeproject.com/Articles/288631/Secure-ASP-NET-MVC3-applications
https://stackoverflow.com/questions/12631325
复制相似问题