gpt4 book ai didi

asp.net-mvc - 在 MVC5 中的 Owin Identity 中重用 regenerateIdentityCallback 中的声明

转载 作者:行者123 更新时间:2023-12-02 01:35:56 26 4
gpt4 key购买 nike

我正在使用具有 Owin 身份的 MVC5。

我正在努力重用 regenerateIdentityCallback 中的任何自定义声明。

我在 Startup 中有此配置(如新 MVC 项目的标准模板中提供的)

        app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser, Guid>(
validateInterval: TimeSpan.FromSeconds(10),
regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager),
getUserIdCallback: (user) => Guid.Parse(user.GetUserId()))
}
});

GenerateUserIdentityAsync 看起来像这样:(以及模板中的几乎标准)

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser, Guid> manager)
{
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);

// I want here instead of generating new one, just reuse the previous one
userIdentity.AddClaim(new Claim(ClaimTypes.Sid, Guid.NewGuid().ToString()));

return userIdentity;
}

问题是,我无法重用声明,并且我总是必须为其获取新的值。对 Identity dll 进行调查后,我发现该用户的 this 实例没有声明,因为它是数据库中的新用户,而 userIdentity 仅具有标准声明作为 Id 和 UserName ,它们由 CreateIdentityAsync 方法创建。从 HttpContext.Current 获取用户是不可能的,在这个地方它是空的。

重用声明以保留 Cookie 中的某些值的最佳方法是什么?我可能误解了 claim 的目的。提前感谢您的帮助

最佳答案

这样做可以获得相同的结果(context.Identity是之前的身份):

OnValidateIdentity = context => SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, DtbsUser, Guid>(
validateInterval: TimeSpan.FromSeconds(30),
regenerateIdentityCallback:
(manager, user) =>
user.GenerateUserIdentityAsync(manager, context.Identity),
getUserIdCallback: (ci) => Guid.Parse(ci.GetUserId())).Invoke(context)

关于asp.net-mvc - 在 MVC5 中的 Owin Identity 中重用 regenerateIdentityCallback 中的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25042822/

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