【发布时间】:2023-03-19 19:41:01
【问题描述】:
我想对我们的新 REST API 实施基于 JWT 的身份验证。但是既然在token中设置了过期时间,是不是可以自动延长呢?如果用户在此期间积极使用该应用程序,我不希望用户在每 X 分钟后登录一次。那将是一个巨大的用户体验失败。
但是延长到期时间会创建一个新令牌(旧令牌在到期之前仍然有效)。在每个请求之后生成一个新令牌对我来说听起来很愚蠢。当多个令牌同时有效时,这听起来像是一个安全问题。当然,我可以使用黑名单使旧的使用无效,但我需要存储令牌。 JWT 的好处之一是无需存储。
我发现了 Auth0 是如何解决它的。他们不仅使用 JWT 令牌,还使用刷新令牌: https://auth0.com/docs/tokens/refresh-tokens
但同样,为了实现这一点(没有 Auth0),我需要存储刷新令牌并保持它们的过期时间。那么真正的好处是什么?为什么不只有一个令牌(不是 JWT)并在服务器上保留过期时间?
还有其他选择吗?使用 JWT 不适合这种情况吗?
【问题讨论】:
-
实际上一次使用多个有效令牌可能没有安全问题...实际上有效令牌的数量是无限的...那么,为什么要有刷新令牌呢?我会在每次请求后重新生成它们,这实际上应该不是问题。
-
@maryo 我认为在任何给定时间都有(可能)成百上千个未使用的有效 JWT 会增加您的攻击足迹并且存在安全风险。在我看来,JWT 应该谨慎发行,因为它们是以某种方式带有城堡钥匙的访问令牌。
标签: security authentication jwt