【发布时间】:2018-01-02 21:41:49
【问题描述】:
对于我的项目,我正在实施使用 Bearer 令牌的 OAuth2 身份验证框架。
从快速搜索来看,JWT 代币似乎是当今 Bearer 代币的主流选择。
如果我使用不编码任何信息的“哑”令牌,我会将此令牌连同所有相关参数(令牌的用户、发行日期、到期日期等)一起存储在数据库中。
从 JWT 的文档中我了解到,我可以通过实现这个流程来避免这种开销:
- 用户使用一种受支持的方法进行身份验证
- 身份验证服务生成 JWT 令牌并将以下参数编码到其中:用户 ID、使用的身份验证方法、颁发日期、到期日期
- 身份验证服务加密然后签署令牌
- 令牌被发送给用户以供后续使用
加密步骤是可取的,因为我不想宣传用户 ID。
我的理解是,如果我使用上面的方法,我可以避免存储访问令牌和用户之间的映射,完全依赖令牌提供的用户ID信息。
这种方法让我感到不安的是,我似乎无法选择“撤销”访问令牌。
换句话说 - 即使访问令牌会被泄露,我也无法禁用它(除非我知道确切的泄露令牌,但事实并非如此)。
这是一个真正的问题,还是我只是错过了一些东西?如果这种担忧是真实存在的,我该如何解决?
【问题讨论】:
-
你是对的,JWT 有效期至到期,你不应该存储它。您可以建立一个撤销列表,但通常的做法是让令牌过期并根据您的需要调整过期期限。见stackoverflow.com/questions/37507714/…
标签: authentication oauth-2.0 jwt