jwt - 在 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)sign
nestjs/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],
}),
解决方案
我无法回答您如何在这种特殊情况下包含盐,但据我所知,仅使用秘密来签名标头和有效负载是很常见的。
通过使用 sing() 函数,从 JwtModule 的配置中自动使用秘密。
推荐阅读
- azure - 从 Azure 表存储的千万条记录中查询一条记录
- python - 如何将墨卡托投影的方形窗口转换为圆形?
- reactjs - 从 Safari 上传图像并在 Web 应用程序中转换为 webp
- python - 使用 .loc 从列表中过滤元素
- gis - 如何参考原点在 ArcMap 中绘制笛卡尔坐标?
- php - 如何在 Laravel 的搜索表单中使用分页
- android - 是否能够访问 android 11 系统应用程序,示例消息
- django - 在 Django Rest Framework 中测试视图集的自定义操作
- python - 如何创建像列一样的子类化熊猫数据框的属性
- python - 在 subprocess.run(..., check=True) 内部,如何防止失败的命令以非零状态退出?