一、jwt: invalid signature
表现
Java API服务生成的token,Nest.js API 服务 @nestjs/jwt 包使用相同的secret,无其他额外配置,却无法通过校验。
原因
通过 JWT官网 调试,发现是因为Java服务用于生成jwt的的secret不是标准 base64 字符。
解决
断点调试,发现非标准base64的secret在Java服务jwt包里会被自动转化为buffer,而@nestjs/jwt 不会自动转化,需要手动执行 Buffer.from() 将secret转化为buffer。
this.jwtService.verify(token, {
secret: Buffer.from(secret, 'base64'),
})
注:业务场景中出现过secret转为buffer格式后依然无法通过校验的情况,原因未知。所以最根本的解决方法还是使用标准base64作为secret。