【问题标题】:Generating and using a secret in a config file for JWT在 JWT 的配置文件中生成和使用密钥
【发布时间】:2018-11-29 01:22:02
【问题描述】:

我有一个关于 JWT 机密的问题。

我了解“最佳实践”是将密钥存储在环境变量中,但是这个设置呢?

我正在使用名为 secrets 的库生成我的秘密。

我将我的秘密存储在配置文件中,相关行如下所示

jwtSecret: process.env.JWT_SECRET || secret,

在哪里secret = new Secret(32, true, true).generate();

现在,我理解这一点的方式是,通过这种设置,每次服务器启动时都会重新生成我的秘密,基本上使所有以前的令牌无效。这是声音设置吗?除了要求他们重新进行身份验证之外,此设置是否会给我的用户带来不必要的不​​满?对我来说呢?使用这样的设置我可能会遇到什么麻烦?我应该指出,该应用程序可能一次只能在一台服务器上运行,因此在多个节点之间共享该秘密在我的情况下不是问题。

哦,如果事实证明这是一个非常糟糕的主意,请通过全部大写来明确表示(我只是在开玩笑,但请务必明确表示)。

【问题讨论】:

  • 这会使缩放变得非常痛苦。想象一下,有 2 台服务器都以不同的秘密平等地接受请求,迫使用户在每次请求到达用户未键入的服务器时重新进行身份验证
  • @Derek 对,但正如我所说,在我的具体情况下这不是问题。谢谢你的意见。您的评论以及下面的答案我认为已经为我回答了这个问题。我可能会更改我的设置以使用单个静态键。

标签: node.js security express authentication jwt


【解决方案1】:

据我所知,您不需要(也不应该)在每次启动服务器时生成秘密。您只需将一个添加到您的环境中就足够了。
但是,如果您非常想生成一个秘密而不是想出一个秘密,您可以编写一个单独的脚本,该脚本可以按需调用,并且只能由身份验证背后的管理员调用。

//maybe some authentication code here
process.env.secret = new Secret(32, true, true).generate();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 2017-11-05
    • 2011-08-30
    • 1970-01-01
    相关资源
    最近更新 更多