首页 > 解决方案 > 如何注销或过期 ASP.NET Core Web API 的 JWT 令牌?

问题描述

我创建了一个令牌:

 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 的这个令牌吗?所以用户永远不会再使用这个令牌。

谢谢

标签: c#asp.net-coreasp.net-core-webapi

解决方案


一旦生成 JWT 并将其发送给客户端。它不能已经更改(不是由客户端本身更改,并且必须通过后端获取新令牌)。

为了使 JWT 无效/撤销,您可能有一个 Redis(推荐)或数据库来存储与每个已发布的 JWT 相关联的无效 JTI(令牌 ID)。

如果您不希望拥有 Redis/数据库,那么您必须尽可能缩短 JWT 的生命周期,例如 5 分钟。然后,在注销时,从客户端(本地存储或 cookie)中删除令牌。但是,这种方法不会立即使 JWT 失效,如果客户端在我们删除它之前保留其令牌,他们仍然能够访问 API。


推荐阅读