dc1*_*115 1 authentication oauth-2.0 jwt
我希望为移动应用程序采用基于令牌的身份验证,只要用户未注销,该应用程序就可以保持用户登录状态。我的方法是在用户登录/注册时创建 JWT 刷新令牌;此令牌永不过期,并持续刷新 20 分钟访问令牌。
当他们注销时就会出现问题。我读过解决此问题的最佳方法是将 Redis 上的 JWT 列入黑名单以存储已撤销的密钥。但是,由于 JWT 永不过期,因此该记录永远无法从 Redis 中删除,并且可能会开始占用我的大量内存。
我应该担心这个吗?或者 Redis 在这方面内存效率高吗?有没有更好的方法来撤销 JWT 且不会过期?
小智 6
JWT 令牌是一个自包含令牌。这意味着它会独立存在,直到过期并且无法撤销。因此根据定义它必须过期。因为当它落入坏人之手时,它将允许您访问您的资源而无法撤销它。所以是的,您应该担心这个实现。
这里的问题是您信任刷新令牌本身,因为它是 JWT。事实上你应该信任服务器。不是因为 JWT 不可信,而是因为刷新令牌不必是 JWT。
将刷新令牌保存在内存中,包括过期时间。您可以从内存中删除过期的令牌。这意味着只有内存中存在的令牌才能用于请求新的访问令牌。为了安全起见,请使用一次性刷新令牌。
流程大概是这样的:
注销时从内存中删除刷新令牌。如果您同时希望撤销访问权限。只需从内存中删除刷新令牌即可。5 分钟内用户必须再次登录。
| 归档时间: |
|
| 查看次数: |
3991 次 |
| 最近记录: |