4

asp.net mvc 4暗号化されたユーザー情報を含むカスタム認証 Cookie を持つ Web アプリがあります。Global.asax.cs で、Cookie を復号化し、カスタム ID とプリンシパルを作成して、コンテキストに設定します。これはすべて、IIS 7.5 を実行しているローカル マシンで機能しますが、IIS 8 を使用してステージング セットアップに公開すると、カスタム プリンシパルがコンテキストに残りません。これが私のコードの要点です

コードサンプル

protected void Application_BeginRequest(object sender, EventArgs e)
{
    AuthenticateRequest(HttpContext.Current);
}

public virtual void AuthenticateRequest(HttpContext context)
{
    var cookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
    if (cookie == null || string.IsNullOrWhiteSpace(cookie.Value))
    {
        return;
    }

    var rawJson = DecryptAuthCookie(cookie.value);
    var stub = AuthenticationStub.FromString(rawJson);

    var context = HttpContext.Current;

    var identity = new CustomIdentity(stub.Username, stub.FirstName, 
                          stub.LastName, stub.Email, stub.UserId, stub.UserType);

    var principal = new CustomPrincipal(identity);

    context.User = principal;
}

この時点で、リモート デバッガーをアタッチして、すべてが正しく設定されていることを確認できます。context.UserですCustomPrincipal

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {   
        // httpContext.User is a 
        // System.Security.Principal.GenericPrincipal not CustomPrincipal 
        return base.AuthorizeCore(httpContext);
    }
}

ここにたどり着くまでに、これは IIS 8 マシンでのみ発生するのではhttpContext.UserなくSystem.Security.Principal.GenericPrincipal、ローカルで実行すると予想どおりであることがわかります。CustomPrincipalCustomPrincipal

AuthenticateRequest私のカスタムプリンシパルCustomAuthorizeAttributeが一掃され、その理由がわかりません。

誰もこれについて経験がありますか?私が持っているのはただの推測です。

4

1 に答える 1

3

あなたの知らないうちに、あなたは他の HttpModules と戦っています。コードを AuthenticateRequest から PostAuthenticateRequest に移動してみてください。

于 2013-10-31T15:59:36.280 に答える