1

global.asax Application_AuthenticateRequest メソッドと、Authorize 属性 filterContext の HttpContext およびコントローラー Context で、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 になります。ユーザーが有効であっても、ページは常にログオン ページにリダイレクトされます。

誰かがなぜそうなのか説明できますか? または、asp.net mvc の httpcontext の内部動作を説明しているブログ フォーラム。この場合、Core ASP.NET httpcontext と MVC httpcontext の値が異なるようです。

4

1 に答える 1

1

MVC3 を使用してテストを行ったところ、どちらの場合も、ユーザーが正しく認証された場合にIsAuthenticatedプロパティが返されます。true

使用したコード:

Global.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 に答える