ASP.net MVC全局授权过滤器强制登录AllowAnonymous操作

时间:2012-06-14 12:47:18

标签: asp.net asp.net-mvc security authentication forms-authentication

设置(使用MVC 4)

public class MyAuthorizeAttribute : AuthorizeAttribute {

    protected override bool AuthorizeCore(HttpContextBase httpContext) {

        var isAuthorised = base.AuthorizeCore(httpContext);

        if(isAuthorised) {
            // retrieve authentication ticket from cookie and
            // create custome principal and attach to 
            // httpContext.User
        }

        return isAuthorised;
    }
}

Gloabl.asax.cs:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new MyAuthorizeAttribute());
}

HomeController.cs:

using System.Web.Mvc;

public class HomeController : Controller
{
    [AllowAnonymous]
    public ActionResult Index()
    {
        return View();
    }
}

问题

对主页的调用会强制加载登录页面。

问题

当HomeController.Index()动作用[AllowAnonymous]修饰时,为什么ASP会将我重定向到登录视图?

我正在使用this文章作为参考

4 个答案:

答案 0 :(得分:11)

根据我对原始问题的评论。问题是索引视图是在返回部分视图的其他控制器上调用操作。只是一个经历所有事情并剥离旧的[授权]属性的案例。

答案 1 :(得分:5)

虽然原始海报在他的案例中找到了原因,但我想分享我的决议,因为我在遇到相同的症状时遇到了这个问题。

在我的web.config文件中,遵循webforms的逻辑:

<authorization>
  <deny users="?" />
</authorization>

您不能拥有此权限,因为除了重定向发生的登录操作之外,它将阻止请求在未先登录的情况下执行任何操作。当我试图添加第二个公共行动时,我才发现了这一点。

答案 2 :(得分:2)

我有类似的问题,最后我使用了错误的AllowAnonymousAttribute类。有两个AllowAnonymousAttribute类:

在你的情况下,你必须使用System.Web.Mvc中的那个:)

我花了一个多小时才在我的程序中找到它

答案 3 :(得分:-1)

虽然这不是答案但是......

尝试使用内置的Authorize代码,并确保AllowAnonymous正常运行。我在你的自定义授权评论中看到了

  

从cookie检索身份验证票证并创建客户   principal并附加到httpContext.User

我建议您在此thread中指定的Application_AuthenticateRequest Global.asax.cs中更早地执行此过程。