c# - 如何注销或过期 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 的这个令牌吗?所以用户永远不会再使用这个令牌。
谢谢
解决方案
一旦生成 JWT 并将其发送给客户端。它不能已经更改(不是由客户端本身更改,并且必须通过后端获取新令牌)。
为了使 JWT 无效/撤销,您可能有一个 Redis(推荐)或数据库来存储与每个已发布的 JWT 相关联的无效 JTI(令牌 ID)。
如果您不希望拥有 Redis/数据库,那么您必须尽可能缩短 JWT 的生命周期,例如 5 分钟。然后,在注销时,从客户端(本地存储或 cookie)中删除令牌。但是,这种方法不会立即使 JWT 失效,如果客户端在我们删除它之前保留其令牌,他们仍然能够访问 API。
推荐阅读
- xml - 可以使用 xsd:dateTime 定义 BC 日期吗?
- sml - 具有高阶函数的 SML 代码错误
- r - 去掉 R 的最后几个大写字母
- javascript - 修复了加载时的全宽导航栏
- c++ - C++ 向量用值初始化
- r - 来自在输出中分离的表的卡方
- javascript - Mongodb shell:使用javascript逻辑修改集合中的每个元素
- javascript - 自firefox 68以来如何在javascript中的同一目录中获取文件
- multithreading - common lisp如何管理cpu资源和同步线程
- git - 将私有 github 存储库设置为 docker 中 package.json 中的依赖项在 github 操作中生成失败