c# - 如何注销或使 ASP.NET Core Web API 的 JWT token 过期?

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

我创建了一个 token :

 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 的 token 过期吗?因此用户将永远不会再使用此 token 。

谢谢

最佳答案

JWT 生成并发送到客户端后。它不能已经更改(不能由客户端本身更改,必须通过后端获取新 token )。

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

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

关于c# - 如何注销或使 ASP.NET Core Web API 的 JWT token 过期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67328230/

相关文章:

c# - 当操作名称以 "no route matches the supplied values"结尾时,Asp.Net Core 3.0 CreatedAtAction 返回 "Async"

c# - 在我的 Web api 端点中解析 HTTP POST 请求正文时出错

c# - 用户在部分 View 中登录并显示错误

c# - ASP.NET Core Identity 在应用程序启动时添加自定义用户角色

asp.net-core - 使用路由参数读取 Asp.Net Core MVC 操作中的原始 Request.Body

c# - 实体更改后更新 IMemoryCache

angular - 使用 ASP.Net Core MVC 和 ASP.Net Web Api 在 Angular2 App 中进行 HTML5 路由

c# - 在 PowerShell 中使用带有重载算术运算符的自定义 .NET 类

c# - 我如何识别我的服务的客户?

c# - 是否有支持混合 C++ 和 C# 应用程序的崩溃报告服务?