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
、ローカルで実行すると予想どおりであることがわかります。CustomPrincipal
CustomPrincipal
AuthenticateRequest
私のカスタムプリンシパルCustomAuthorizeAttribute
が一掃され、その理由がわかりません。
誰もこれについて経験がありますか?私が持っているのはただの推測です。