1

我在我的 global.asax Application_AuthenticateRequest 方法和授权属性 filterContext 的 HttpContext 以及控制器上下文中具有不同的 HttpContext 对象值。

我已将应用程序设置为运行单点登录。这是我的 web.config:

<authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" name="FormsAuth" timeout="2880000"  domain="domain.com" slidingExpiration="true" defaultUrl="~/home/index"/>
    </authentication>

然后登录,验证用户后,设置身份验证cookie。

FormsAuthentication.SetAuthCookie(userName, true);

现在的问题是,当断点在全局 asax Application_AuthenticateRequest 方法上命中时,Request.IsAuthenticated 为 true,但当它命中 Authorize 属性的 OnAuthorize 方法时,其 filterContext.HttpContext.Request.IsAuthenticated 为 false。即使用户有效,该页面也将始终重定向到登录页面。

有人可以解释为什么会这样吗?或任何解释 httpcontext 在 asp.net mvc 中的内部工作的博客论坛。在这种情况下,Core ASP.NET httpcontext 和 MVC httpcontext 似乎具有不同的价值。

4

1 回答 1

1

我刚刚使用 MVC3 进行了测试,在这两种情况下,如果用户验证正确,IsAuthenticated属性都会返回:true

使用的代码:

全球.asax

protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
    this.Context.Trace.Warn("From global asax: " + this.Context.Request.IsAuthenticated.ToString());
}

自定义授权过滤器

public class CustomAuthorization : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        HttpContext.Current.Trace.Warn("from attribute: " + filterContext.RequestContext.HttpContext.Request.IsAuthenticated.ToString());
        base.OnAuthorization(filterContext);
    }
}

我希望这可以帮助您找到问题

于 2012-08-01T07:40:12.810 回答