在 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 的配置文件中生成和使用密钥的主要内容,如果未能解决你的问题,请参考以下文章

来自文件的 Spring Boot http 安全 jwt 密钥

在 NativeScript 应用程序中生成和显示 PDF

在 Spring 应用程序中保护重要的密钥/配置

如何使用对称密钥配置 Microsoft JWT?

如何使用对称密钥配置 Microsoft JWT?

如何配置反应式资源服务器以使用具有对称密钥的 JWT?