[英]How to update user claims stored in authentication cookie in .NET Core 6
我有一个使用 .NET Core 6 开发的 Razor Pages 应用程序。该应用程序用作客户端并连接到 API。 API 具有 JWT 访问令牌/刷新令牌身份验证。 API 的登录端点返回访问令牌和刷新令牌。使用cookie 身份验证我将令牌作为声明存储在身份验证 cookie 中。
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, Login.Email),
new Claim("Token", loginResponse.Token),
new Claim("RefreshToken", loginResponse.RefreshToken)
};
然后我使用扩展方法获取令牌
public static class CommonExtensions
{
public static string? GetToken(this HttpContext context)
{
return context.User.Claims.Single(x => x.Type == "Token").Value.ToString();
}
public static string? GetRefreshToken(this HttpContext context)
{
return context.User.Claims.Single(x => x.Type == "RefreshToken").Value.ToString();
}
}
当我的访问令牌过期时,我会刷新它,删除现有声明并使用更新的令牌添加新声明。
var identity = User.Identity as ClaimsIdentity;
identity.RemoveClaim(identity.FindFirst("Token"));
identity.AddClaim(new Claim("Token", response.Token));
identity.RemoveClaim(identity.FindFirst("RefreshToken"));
identity.AddClaim(new Claim("RefreshToken", response.RefreshToken));
但是,后续请求继续使用过期的令牌。 正确更新声明的方法是什么?
为了保存您的更改,您需要根据Microsoft调用SignInAsync
。
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, User);
如果它不起作用,也许您需要先调用SignOutAsync
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.