gpt4 book ai didi

c# - 如何更新 OWIN CookieAuthenticationProvider 中的声明?

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

在使用 OWIN 管道的 ASP.NET 应用程序中,我尝试使用 cookie 身份验证并覆盖 CookieAuthenticationProvider.ValidateIdentity 并执行类似以下操作:

public override Task ValidateIdentity(CookieValidateIdentityContext context) {
Claim simpleClaim = context.Identity.FindFirst("SIMPLECOUNT");
if (simpleClaim != null) {
Trace.WriteLine($"SIMPLECOUNT: {simpleClaim.Value}");
if (context.Identity.TryRemoveClaim(simpleClaim)) {
var newIdentity = new ClaimsIdentity(context.Identity);
int newcount = 1 + int.Parse(simpleClaim.Value);
newIdentity.AddClaim(new Claim("SIMPLECOUNT", newcount.ToString()));
context.ReplaceIdentity(newIdentity);
}
}

return Task.FromResult<object>(null);
}

实际上我正在更新其他声明,并且只是偶尔这样做。但这突出了主要的困惑。我可以调用 context.RejectIdentity() 或调用 context.ReplaceIdentity()。据推测,如果我调用“拒绝”,旧的 ClaimsIdentity 将成为废墟。因此,如果我在删除旧的声明值后重复替换一个 ClaimsIdentity,并用递增的值添加回声明,我希望再也看不到旧值.

但事实并非如此。相同的值不断返回。通过使用 cookie 超时设置,我可以看到一旦 cookie 由于滑动过期而被替换,最终会显示递增的声明值。最终会更新的新值甚至被“排队”在哪里?

至于重复出现的旧值,这是来自浏览器的 cookie 重新声明自身吗?我不想让用户退出以更新声明——事实上我真的只使用声明作为存储,因为我不知道在这种情况下我还能使用什么(与 Controller 方法相反)。有更好的方法吗?最后,我要做的是将 cookie 过期与写入 cookie 的更新 API token 同步。

最佳答案

我知道这可能有点晚了,但我发现如果您再次让用户登录,旧声明将被新声明替换。所以你的案例看起来像这样。

public override Task ValidateIdentity(CookieValidateIdentityContext context) {
Claim simpleClaim = context.Identity.FindFirst("SIMPLECOUNT");
if (simpleClaim != null) {
Trace.WriteLine($"SIMPLECOUNT: {simpleClaim.Value}");
if (context.Identity.TryRemoveClaim(simpleClaim)) {
var newIdentity = new ClaimsIdentity(context.Identity);
int newcount = 1 + int.Parse(simpleClaim.Value);
newIdentity.AddClaim(new Claim("SIMPLECOUNT", newcount.ToString()));

context.Request.Context.Authentication.SignIn(newIdentity);
}
}

return Task.FromResult<object>(null);
}

关于c# - 如何更新 OWIN CookieAuthenticationProvider 中的声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39782120/

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