【问题标题】:How to logout or expire JWT token for ASP.NET Core Web API?如何注销或过期 ASP.NET Core Web API 的 JWT 令牌?
【发布时间】: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 的优点。您应该在发行令牌时考虑它。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-02-20
    • 2020-08-05
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 2016-10-23
    • 1970-01-01
    • 2020-11-02
    相关资源
    最近更新 更多