如何更新OWIN CookieAuthenticationProvider中的声明?

本文关键字:CookieAuthenticationProvider 声明 OWIN 何更新 更新 | 更新日期: 2023-09-27 18:09:30

. NET应用程序使用OWIN管道,我试图使用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. rejectiidentity()或者context.ReplaceIdentity()。大概如果我调用"reject",旧的claimidentity就会消失。因此,如果我在擦除旧的索赔值后反复替换 ClaimsIdentity,并使用增量值添加回索赔,我希望永远不会再看到的旧值。

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

对于反复出现的旧值,这是浏览器重新定义自己的cookie吗?我不想让用户退出才能更新声明——事实上,我只是认真地将声明用作存储,因为我不知道在这个上下文中还能使用什么(与控制器方法相反)。有没有更好的方法?最终,我要做的是将cookie过期与写入 cookie的更新API令牌同步。

如何更新OWIN CookieAuthenticationProvider中的声明?

我知道这可能有点晚了,但我发现如果您再次为用户签名,旧的声明将被新的声明所取代。所以你的情况是这样的。

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);
}
相关文章:
  • 没有找到相关文章