【问题标题】:Avoid validating jwt token on every request避免在每个请求上验证 jwt 令牌
【发布时间】:2019-04-02 01:45:25
【问题描述】:

考虑一个案例,我在登录时发送了auth-token。 现在有什么方法可以避免将DB 打到validate 每个requestnode server

任何链接或描述都会有所帮助。

【问题讨论】:

标签: javascript node.js jwt


【解决方案1】:

我不确定你为什么要点击 DB 来验证令牌。 但建议不要在令牌有效负载中存储敏感数据(例如电子邮件/密码)。 因为任何人都可以看到有效载荷(请记住,其编码未加密)。

请参考:Is it safe to store sensitive data in JWT Payload?

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

是的,您可以分两步完成:

  1. 首先,JWT 令牌验证不需要 DB 调用。通常使用 HMACSHA256 对 JWT 进行签名。如果您有密钥,您应该能够计算传入 JWT 有效负载的 MAC 并将其与传入 MAC 进行比较,而无需进行任何 DB 调用。

  2. 为了增加安全性,您可以将新创建​​的 JWT 存储在内存缓存中(例如 Redis),其 TTL 应与 JWT 有效期相同。当 TTL 过期时,缓存会自动移除导致验证失败的 JWT 条目。如果由于某种原因,缓存未与文件系统同步并且您的缓存服务器崩溃,那么您所失去的只是迫使用户重新登录的有效令牌(当然您可以在通常的情况下采取措施避免这种情况)。因此,您需要做的就是将传入的 JWT 与缓存列表进行比较。如果在缓存中,则验证成功

【讨论】:

    猜你喜欢
    • 2021-09-17
    • 2016-03-29
    • 2017-10-15
    • 2020-11-09
    • 2020-06-08
    • 2017-09-24
    • 2019-09-16
    • 2019-01-03
    • 1970-01-01
    相关资源
    最近更新 更多