JWT访问令牌安全注意事项

时间:2017-07-27 09:03:02

标签: authentication oauth-2.0 jwt

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

从快速搜索来看,JWT令牌看起来是今天Bearer令牌的主流选择。

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

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

  1. 用户使用其中一种受支持的方法进行身份验证
  2. 身份验证服务生成JWT令牌并将以下参数编码到其中:用户ID,使用的身份验证方法,发布日期,到期日期
  3. 验证服务加密然后签署令牌
  4. 将令牌发送给用户以供后续使用
  5. 加密步骤是可取的,因为我不想宣传用户ID。

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

    这种方法令我感到不安的是,看起来我不会选择“撤销”访问令牌。

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

    这是一个真正令人担忧的问题,还是我只是缺少一些东西?如果这个问题是真的,我该如何解决呢?

1 个答案:

答案 0 :(得分:1)

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

如果您需要更高级别的安全性,可以使用参考标记。参考标记不包含任何信息,它们是简单的字符串。但是,服务器(或使用这些令牌的任何人)必须联系令牌提供者以交换参考令牌以获得实际的响应内容。但是,如果这些令牌受到损害,则可以撤销这些令牌。

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

-Soma。