2017-07-27 62 views
0

对于我的项目,我实现了使用承载令牌的OAuth2身份验证框架。JWT访问令牌安全注意事项

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

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

从智威汤逊的文档,我明白,我可以实现此流程避免这种开销:

  1. 用户提供支持的方法
  2. 认证服务生成JWT令牌和下面的参数编码为它一个验证:用户ID,使用的验证方法,发行日期,到期日期
  3. 验证服务加密并签署令牌
  4. 令牌发送给用户以供后续使用

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

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

这种方法让我感到困扰的是,看起来我没有选择“撤销”访问令牌。换句话说,即使访问令牌会被破坏,我也无法将其禁用(除非我知道确切的受损令牌,事实并非如此)。

这是一个真正的担忧,或者我只是想念一些事件?如果这种担忧是真实的,我该如何解决它?

+1

你说得对,智威汤逊有效期到期,你不应该存储它。你可以建立一个撤销清单,但通常的做法是让令牌过期并根据需要调整到期期限。请参阅https://stackoverflow.com/questions/37507714/invalidating-client-side-jwt-session – pedrofb

回答

1

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

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

欲了解更多信息和一些关于如何克服参考令牌缺点的建议(如反向信道通信/向令牌提供商额外往返),请参阅此link。请让我知道,如果你有任何问题。

-Soma。