如何注销或过期 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 中的单点注销

IdentityServer3 注销功能不适用于 ASP.NET Core 客户端

jwt token 过期时间(asp.net core)