作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在使用 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/
我是一名优秀的程序员,十分优秀!