【问题标题】:Where should I store jwt token for authentication on server side我应该在哪里存储 jwt 令牌以在服务器端进行身份验证
【发布时间】:2017-08-15 12:50:53
【问题描述】:

在我的 nodejs 应用程序中,我使用 jwt 令牌进行身份验证。现在,在创建令牌之后,将对其进行验证。为此,它应该存储在某个地方以进行验证。所以,我的问题是,我应该将它存储在针对相关用户 ID 的单独数据库模式中,还是应该将它存储在其他地方?

【问题讨论】:

    标签: node.js jwt


    【解决方案1】:

    JWT 不需要存储在服务器端。创建 JWT 时,您使用秘密对其进行加密 - 将其视为“密码”。然后你把它发送给客户端,在那里可以存储它。

    当客户端发出请求时,它会同时发送 JWT。在服务器端,您可以使用相同的秘密对其进行解密。如果密钥不起作用,您就知道它是无效的 JWT。

    出于显而易见的原因,您的 JWT 机密应该保密!最好的方法是将其存储为环境变量。

    【讨论】:

    • 假设,我有来自客户端的多个请求,所以不同的客户端会有不同的 jwt 令牌,所以按照你的说法,我应该只将用于生成所有这些令牌的秘密存储在环境变量中。还是我解释错了?
    • 正确。例如,当用户登录时,您可能希望将他们的 ID 和电子邮件地址存储在 JWT 中。这会用你的秘密加密。每当该用户提出请求时,您都使用相同的秘密对其进行解密,该秘密会产生他们的 ID 和电子邮件地址,以便您知道是谁提出了请求。由于您是唯一知道秘密的人,因此您可以对每个 JWT 使用相同的秘密。
    • 为了准确起见,您不一定要“加密”它,您可以签名。
    【解决方案2】:

    无需在服务器端存储 JWT。这就是 JWT 在服务器端启用“异步”令牌验证的重点。

    以下是涉及的一系列步骤,以简化的方式表示:

    1- 服务器使用一个秘密创建一个 JWT(在多个服务器节点之间维护这个秘密很重要,因为客户端可以使用给定的 JWT 连接到其中的任何一个服务器)

    2- 客户端存储此 JWT 并在随后对服务器的请求中提供它

    3- 服务器(或场中的任何给定服务器节点)根据之前用于加密/创建 JWT 的密钥验证传入的 JWT

    HTH

    【讨论】:

      猜你喜欢
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 2018-11-23
      • 2012-08-31
      • 2020-04-10
      • 1970-01-01
      • 2021-07-11
      相关资源
      最近更新 更多