【问题标题】:JWT access token security considerationsJWT 访问令牌安全注意事项
【发布时间】:2018-01-02 21:41:49
【问题描述】:

对于我的项目,我正在实施使用 Bearer 令牌的 OAuth2 身份验证框架。

从快速搜索来看,JWT 代币似乎是当今 Bearer 代币的主流选择。

如果我使用不编码任何信息的“哑”令牌,我会将此令牌连同所有相关参数(令牌的用户、发行日期、到期日期等)一起存储在数据库中。

从 JWT 的文档中我了解到,我可以通过实现这个流程来避免这种开销:

  1. 用户使用一种受支持的方法进行身份验证
  2. 身份验证服务生成 JWT 令牌并将以下参数编码到其中:用户 ID、使用的身份验证方法、颁发日期、到期日期
  3. 身份验证服务加密然后签署令牌
  4. 令牌被发送给用户以供后续使用

加密步骤是可取的,因为我不想宣传用户 ID。

我的理解是,如果我使用上面的方法,我可以避免存储访问令牌和用户之间的映射,完全依赖令牌提供的用户ID信息。

这种方法让我感到不安的是,我似乎无法选择“撤销”访问令牌。

换句话说 - 即使访问令牌会被泄露,我也无法禁用它(除非我知道确切的泄露令牌,但事实并非如此)。

这是一个真正的问题,还是我只是错过了一些东西?如果这种担忧是真实存在的,我该如何解决?

【问题讨论】:

  • 你是对的,JWT 有效期至到期,你不应该存储它。您可以建立一个撤销列表,但通常的做法是让令牌过期并根据您的需要调整过期期限。见stackoverflow.com/questions/37507714/…

标签: authentication oauth-2.0 jwt


【解决方案1】:

访问令牌自包含,只要到期时间有效,就有效。在实际规范中没有关于使它们无效的规范。根据您需要的安全级别,您可以调整令牌的验证时间,从几分钟到几小时。通常,验证时间设置为一个小时。

如果您需要更高级别的安全性,您可以使用参考令牌。引用标记不携带任何信息,它们是纯字符串。但是,服务器(或使用这些令牌的任何人)必须联系令牌提供者以将参考令牌交换为实际响应内容。但是,如果这些令牌被泄露,它们可以被撤销。

请参阅此link 以获取更多信息和一些关于如何克服参考令牌的一些缺点的建议(例如反向通道通信/与令牌提供者的额外往返)。如果您有任何问题,请告诉我。

-索玛。

【讨论】:

    猜你喜欢
    • 2018-10-16
    • 2015-05-06
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2019-12-08
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多