如何注销或过期 ASP.NET Core Web API 的 JWT 令牌?
Posted
技术标签:
【中文标题】如何注销或过期 ASP.NET Core Web API 的 JWT 令牌?【英文标题】:How to logout or expire JWT token for ASP.NET Core Web API? 【发布时间】:2021-07-23 11:06:21 【问题描述】:我创建了一个令牌:
IdentityOptions identityOptions = new IdentityOptions();
var claims = new Claim[]
new Claim(identityOptions.ClaimsIdentity.UserIdClaimType, token.User.FirstOrDefault().ID.ToString()),
new Claim(identityOptions.ClaimsIdentity.UserNameClaimType,request.Local.UserName),
;
var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("this-is-my-secret-key"));
var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);
var jwt = new JwtSecurityToken(signingCredentials: signingCredentials, claims: claims, expires: DateTime.Now.AddHours(12));
您能帮我如何注销或过期 ASP.NET Core Web API 的此令牌吗?所以用户永远不会再使用这个令牌了。
谢谢
【问题讨论】:
这能回答你的问题吗? JWT Token: logout JWT token Yong 我已经检查过了,但它对我没有用。 db 有删除。 您不能过期或取消 JWT 令牌,因为您不跟踪令牌,这就是 JWT 的优点。您应该在发行令牌时考虑它。 【参考方案1】:一旦生成 JWT 并将其发送给客户端。它不能已经改变(不是由客户端本身更改,必须通过后端获取新令牌)。
为了使 JWT 无效/撤销,您可能有一个 Redis(推荐)或数据库来存储与每个已发布的 JWT 相关联的无效 JTI(令牌 ID)。
如果您不希望拥有 Redis/数据库,那么您必须尽可能缩短 JWT 的生命周期,例如 5 分钟。然后,在注销时,从客户端(本地存储或 cookie)中删除令牌。但是,这种方法不会立即使 JWT 失效,如果客户端在我们删除它之前保留其令牌,他们仍然能够访问 API。
【讨论】:
以上是关于如何注销或过期 ASP.NET Core Web API 的 JWT 令牌?的主要内容,如果未能解决你的问题,请参考以下文章
交换 Azure Web App 部署槽会注销 ASP.NET Core RC2 中的所有用户
ASP.NET Core MVC:设置身份 cookie 过期
如何解决ASP.NET Core Web应用程序个人账户无法使用的问题?
ASP.NET Core OpenID Connect 中的单点注销