【问题标题】:mvc 3 session and authorizeAttributemvc 3会话和authorizeAttribute
【发布时间】:2012-03-21 17:24:11
【问题描述】:

我的网站对所有人开放,但我有一个控制器,它有一些方法,只有拥有用户名和密码的经理才能进入。我将布尔值 IsManager 保存在 session 中。
我想使用 authorize 属性来阻止IsManager == false

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 authorize-attribute


    【解决方案1】:

    首先定义一个ActionFilter

    public class TheFilter: ActionFilterAttribute
    {
       public override void OnActionExecuting(ActionExecutingContext filterContext)
       {
            var session = filterContext.HttpContext.Session;
            if ((bool?)session["IsManager"] == true)
                return;
    
            //Redirect him to somewhere.
            var redirectTarget = new RouteValueDictionary
                 {{"action", "{ActionName}"}, {"controller", "{ControllerName}"}};
            filterContext.Result = new RedirectToRouteResult(redirectTarget);
       }
    }
    

    然后在受限的Action(或控制器)之上使用它:

    //[TheFilter]
    public class ManagersController : Controller
    {
        [TheFilter]
        public ActionResult Foo()
        {
            ...
            return View();
        }
    }
    

    【讨论】:

    • 安全过滤器应该实现 IAuthorizationFilter - 它在操作过滤器之前运行。您正在使用操作过滤器打开一个安全漏洞购买。请参阅我关于过滤器的 MSDN 文章 msdn.microsoft.com/en-us/library/gg416513(VS.98).aspx 最好覆盖管理控制器的 OnAuthorization 过滤器。
    • @Rick.Anderson-at-Microsoft.com 我相信使用身份验证过滤器也是如此,您需要格外小心,以免遇到缓存问题并返回内容另一个用户,不是吗?
    • @Rick.Anderson-at-Microsoft.com。我读了你的帖子。看不到我打开的任何安全漏洞,你能举个例子吗?
    • @gdoron 不适合我。我通过 AJAX 使用部分视图加载页面,但这种方法不起作用:(有什么想法吗?
    【解决方案2】:

    要使这与 ASP.NET 安全性保持一致,您应该将 IsManager 角色添加到您的成员资格/角色系统,然后将该用户添加到该角色。那时不需要黑客攻击,您可以使用内置的 Authorize 属性。

    您是否使用内置的会员服务提供商?如果是这样,这将是一个快照。

    【讨论】:

    • 现在我不使用会员服务提供商之类的东西。我的网站是公开的,除了一小部分是我想限制访问的经理专用控制器...
    • 然后您可以简单地在 Application_AuthenticateRequest 上创建 IPrinciple 并在那里填充角色,以便您可以使用 Authorize 属性。这样,如果您迁移到会员系统,则无需更改任何属性(就像在自定义属性的情况下一样)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2011-10-19
    • 2020-05-13
    • 2015-04-07
    • 1970-01-01
    相关资源
    最近更新 更多