gpt4 book ai didi

c# - AuthenticateRequest 和 AuthorizeAttribute 之间的自定义委托(delegate)人丢失

转载 作者:行者123 更新时间:2023-11-30 12:09:58 24 4
gpt4 key购买 nike

我有一个 asp.net mvc 4 网络应用程序,其中有一个包含加密用户信息的自定义身份验证 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 之间的某个地方,我的自定义委托(delegate)人被删除了,我不知道为什么。

有没有人有这方面的经验?我所有的都是疯狂的猜测。

最佳答案

您不知道的是,您正在与其他 HttpModule 发生冲突。尝试将您的代码从 AuthenticateRequest 移至 PostAuthenticateRequest。

关于c# - AuthenticateRequest 和 AuthorizeAttribute 之间的自定义委托(delegate)人丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19711141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com