在 JWT 的配置文件中生成和使用密钥
Posted
技术标签:
【中文标题】在 JWT 的配置文件中生成和使用密钥【英文标题】:Generating and using a secret in a config file for JWT 【发布时间】:2018-11-29 01:22:02 【问题描述】:我有一个关于 JWT 机密的问题。
我了解“最佳实践”是将密钥存储在环境变量中,但是这个设置呢?
我正在使用名为 secrets
的库生成我的秘密。
我将我的秘密存储在配置文件中,相关行如下所示
jwtSecret: process.env.JWT_SECRET || secret,
在哪里secret = new Secret(32, true, true).generate();
现在,我理解这一点的方式是,通过这种设置,每次服务器启动时都会重新生成我的秘密,基本上使所有以前的令牌无效。这是声音设置吗?除了要求他们重新进行身份验证之外,此设置是否会给我的用户带来不必要的不满?对我来说呢?使用这样的设置我可能会遇到什么麻烦?我应该指出,该应用程序可能一次只能在一台服务器上运行,因此在多个节点之间共享该秘密在我的情况下不是问题。
哦,如果事实证明这是一个非常糟糕的主意,请通过全部大写来明确表示(我只是在开玩笑,但请务必明确表示)。
【问题讨论】:
这会使缩放变得非常痛苦。想象一下,有 2 台服务器都以不同的秘密平等地接受请求,迫使用户在每次请求到达用户未键入的服务器时重新进行身份验证 @Derek 对,但正如我所说,在我的具体情况下这不是问题。谢谢你的意见。您的评论以及下面的答案我认为已经为我回答了这个问题。我可能会更改我的设置以使用单个静态键。 【参考方案1】:据我所知,您不需要(也不应该)在每次启动服务器时生成秘密。您只需将一个添加到您的环境中就足够了。 但是,如果您非常想生成一个秘密而不是想出一个秘密,您可以编写一个单独的脚本,该脚本可以按需调用,并且只能由身份验证背后的管理员调用。
//maybe some authentication code here
process.env.secret = new Secret(32, true, true).generate();
【讨论】:
以上是关于在 JWT 的配置文件中生成和使用密钥的主要内容,如果未能解决你的问题,请参考以下文章