首页 > 解决方案 > 在 NestJS 中包含用于签署 JWT 的密钥和盐

问题描述

我有一个用 Phoenix-Framework 编写的组件(它是引擎盖下的灵丹妙药),
我正在用 NestJS 重写它。

JWT 被用作身份验证的一种方式。
有一部分是在用户注册后,会发送一封包含确认链接的电子邮件。
Phoenix 对 JWT Token 进行签名的方式是使用 sign方法。

它具有以下签名:sign(context, salt, data, opts \\ [])

事情是这样的:上下文是 Elixir 找到密钥库的地方,这可以看作是签名过程的对称密钥。但是,您还传递了另一个“秘密”,即salt

现在,在 NestJS 中,到目前为止我发现的只是jwt 实用程序嵌套模块,它使用json-webtoken 节点模块

在那里,您所能做的就是: jwt.sign(payload, secretOrPrivateKey, [options, callback])

在选项下,没有“盐”选项。

我的主要问题:我如何在这里加入盐?
我的另一个问题:
1)如果我不使用基本的 SHA-256,而是使用 HMAC-SHA 或它叫什么,我什至需要盐吗?
2)signnestjs/jwt 中的方法仅使用 1 个参数:

jwtService.sign(payload: string | Object | Buffer, options?: SignOptions): string

sign 方法是 jsonwebtoken .sign() 的实现。

我什至如何在那里传递密钥?还是我一开始配置后自动使用的:

JwtModule.registerAsync({
  imports: [ConfigModule],
  useFactory: async (configService: ConfigService) => ({
    secret: configService.getString('SECRET'),
  }),
  inject: [ConfigService],
}), 

标签: jwtphoenix-frameworknestjsjwt-auth

解决方案


我无法回答您如何在这种特殊情况下包含盐,但据我所知,仅使用秘密来签名标头和有效负载是很常见的。

通过使用 sing() 函数,从 JwtModule 的配置中自动使用秘密。


推荐阅读