我有一个asp.net mvc 4
Web 应用程序,其中有一个自定义身份验证 cookie,其中包含加密的用户信息。在我的 Global.asax.cs 中,我解密 cookie,创建自定义身份和主体,并将其设置在上下文中。这一切都适用于运行 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);
}
}
当我到达这里时,我可以看到这httpContext.User
不是System.Security.Principal.GenericPrincipal
只CustomPrincipal
发生在 IIS 8 机器上,当我在本地运行它时,它CustomPrincipal
符合预期。
介于两者之间AuthenticateRequest
,我CustomAuthorizeAttribute
的自定义主体被消灭了,我不知道为什么。
有人对这个有经验么?我所拥有的只是疯狂的猜测。