【问题标题】:How refresh tokens add security to jwt?刷新令牌如何为 jwt 添加安全性?
【发布时间】:2021-10-28 11:14:55
【问题描述】:
我知道 jwt 是如何工作的,如果我是真的,刷新令牌用于生成或签署新的 jwt 或访问令牌。所以他们扮演加密密钥的角色?我不明白当 jwt 被盗时,刷新令牌如何帮助提高 jwt 的安全性?在 db 或 jwt 有效负载本身(或客户端上除访问令牌之外的其他位置)中具有刷新令牌是否重要?他们存在的唯一目的是否只是刷新令牌而没有任何真正的额外安全增强?如果黑客设法窃取 jwt 可以刷新令牌帮助吗?请提前说明谢谢
【问题讨论】:
标签:
oauth-2.0
jwt
access-token
refresh-token
【解决方案1】:
刷新令牌使您能够缩短访问令牌的生命周期,这具有一些间接的安全优势。考虑以下配置时间:
访问令牌
访问令牌通常是bearer token,如果被盗,任何人都可以使用它,类似于现金。如果攻击者以某种方式窃取了访问令牌,他们应该无法长时间使用它。
实际上,访问令牌通常不可撤销。这是因为它们用于 API 调用,如果所有 API 都必须在每个 API 请求上联系令牌颁发者(通常是 OAuth 授权服务器),这将是一个性能问题。
刷新令牌
这些不执行加密,仅由客户端用于刷新访问令牌。刷新操作应该需要客户端密码。这确保了如果攻击者以某种方式窃取了刷新令牌,他们就不容易使用它。
刷新令牌的生命周期更长,通常代表经过身份验证的用户会话的生命周期。当它过期时,用户必须重新认证。所有提供者都应允许撤销刷新令牌,但这样做通常不会撤销活动访问令牌。
建议
- 保持访问令牌的生命周期较短,对于
good security
- 使用寿命更长的刷新令牌来提供
good usability,并且需要客户端密码
- 通过编写代码尝试处理被盗访问令牌来避免增加复杂性