如何在ASP.Net Core中强制使JWT令牌过期?

3

我已经在ASP.NET Core中实现了JWT身份验证和基于策略的授权。有一个拥有管理员特权的用户可以向非管理员用户分配权限。如果管理员更新了非管理员用户的权限/声明,是否有一种方法可以强制使访问令牌过期,以便携带它的用户将被迫使用新的访问令牌请求具有新权限/声明的访问令牌?目前,唯一的方法是等待令牌过期,但我想立即强制使其过期。


你能否编辑这篇文章并展示一下你如何使用JWT编写授权功能? - michasaucer
1
@michasaucer 这段代码只是在ASP.NET Core 2.* /3.* 中非常简单的 JWT 认证实现,您可以在Google和其他文档和博客中轻松找到。我只想要在更新用户权限时强制过期已经在有效用户手中的访问令牌。 - Wendell
使用撤销可能是可行的,但实际上,处理JWT中不包含数据的授权会更容易。使用网络调用进行远程授权是最好的选择。这里有一个示例 https://github.com/Perustaja/PermissionServerDemo - perustaja
1个回答

2

基于JWT令牌的身份验证在服务器端是无状态的。因此,当令牌未过期时,它将起作用。解决这个问题有以下几种方法:

  • 不在令牌声明中包含角色和权限,并在每个请求中从数据库获取这些值。
  • 使用刷新令牌机制,并将刷新时间设置为几分钟,在刷新时间到期时返回新令牌。因此,对于已过期刷新时间的令牌,您知道如何获取新的访问权限(而不是在每个请求中)。新的权限将在几分钟内设置,但经过身份验证的用户无需重新登录。
  • 创建一组黑名单令牌,并将最后一个发出的令牌附加到其中(不建议使用)。

谢谢你的回答,我很感激。我已经实现了刷新令牌的概念,但只有在访问令牌过期时才会请求。一旦用户权限发生变化,我需要立即使访问令牌失效。我想你建议的第一个选项现在是最好的选择。再次感谢! - Wendell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接