我有一个 JWT 策略,其验证功能类似于
async validate(payload: JwtPayload): Promise<LeanedUser> {
console.log(payload);
return this.authService.getUserFromTokenAndValidate(payload.uid);
}
// payload is not getting logged on the console
登录后,我得到一个由 JWT 服务签名的访问令牌并尝试获取用户配置文件
curl --location --request GET 'http://localhost:3000/v1/users/profile' --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaXNwbGF5Ijp7Im5hbWUiOnsiZmlyc3QiOiJBbWl0IiwibGFzdCI6IlNpbmdoIn0sImVtYWlsIjoidXNlckBleGFtcGxlLmNvbSIsInJvbGUiOjB9LCJ1aWQiOiI2MTZlYjc1MDRmMzg2MjAxY2E4NTIwOGMiLCJpYXQiOjE2MzQ2NDU4NDAsImV4cCI6MTYzNDczMjI0MH0.mq3NLR1erddT9hSMb-38smyoOPR3tkPcGsu7bRIoDSQ' -s | jq
{
"statusCode": 401,
"message": "Unauthorized"
}
JWT模块配置如下
JwtModule.registerAsync({
inject: [ConfigService],
useFactory: (configService: ConfigService) => ({
secret: configService.get<string>('JWT_SECRET'),
signOptions: { expiresIn: '10d' },
}),
}),
我所做的以下我认为可能会破坏 JWT
- 将 JWT 机密从“hello_world”更改为随机字符串
- 将 expiresIn 更改为“10d”
请注意,我还尝试恢复上述更改并尝试登录。它正在根据新配置返回访问令牌,但仍然是相同的 401 Unauthorized 问题