【问题标题】:I need to manage jwt secret keys individually for each user?我需要为每个用户单独管理 jwt 密钥吗?
【发布时间】:2018-02-17 02:47:59
【问题描述】:

我使用 jsonwebtoken 模块实现了 jwt 身份验证。但是在生成和验证 jwt 令牌时,我是否需要为每个用户创建和管理任意密钥?为每个用户单独管理密钥与使用一个密钥生成和验证 jwt 令牌之间有区别吗?

【问题讨论】:

    标签: node.js jwt


    【解决方案1】:

    不,您使用单个密钥来签署您的令牌。这是因为当令牌在请求中返回给您时,您需要能够解码令牌,此时您不知道是否是真正的用户发送您的令牌,因为您还没有验证它.

    使用单一密钥来签署和验证您的令牌,并记得妥善保管。

    【讨论】:

    • 从技术上讲,没有什么能阻止您在检查签名之前解析 JWT 令牌的标头和/或负载。然而,在这个阶段不能信任令牌。
    • 非常感谢!!罗斯柴尔德,卡西奥·马佐奇·莫林
    【解决方案2】:

    为每个用户单独管理密钥与使用一个密钥生成和验证 jwt 令牌之间有区别吗?

    简短的回答是否定的,就 JWT 而言,密钥就是密钥。

    长答案是视情况而定。 JWT secret 的目的是确保消息的完整性,通常这是您在颁发者(服务器)级别执行的操作,作为验证消息来源的一种方式。通俗地说,如果服务器可以验证签名,那么它就可以信任内容。

    用户级别的机密将信任降低了一个级别,因为您不关心哪个服务器生成了消息,而是关心哪个 用户 生成了消息。在典型的身份验证令牌场景中,您确实需要更多的服务器信任。

    【讨论】:

      【解决方案3】:

      不,您绝对不需要每个用户都有一个密钥。在大多数情况下,一个密钥对所有用户来说就足够了。

      如果您愿意,您可以拥有一组不同的密钥并定期轮换它们以签署令牌。在这种情况下,使用kid 标头声明来保存密钥标识符,然后使用它查找正确的密钥以验证令牌。在answer 中查看更多详细信息。

      【讨论】:

      • 非常感谢!!卡西奥·马佐奇·莫林
      猜你喜欢
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 2015-09-01
      • 1970-01-01
      • 2021-12-17
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多