Я импортировал модуль @ nestjs / jwt, и в моем пользовательском модуле есть следующее:
const pubkey = fs.readFileSync('./src/certs/client.key.pub');
@Module({
imports: [JwtModule.register({ publicKey: pubkey}), JwtHelper,
HttpModule],
providers: [UserService, JwtHelper],
controllers: [UserController],
exports: [UserService],
})
pubkey - это то, что я сгенерировал на основе конечной точки jwks.На сервере происходит ротация ключей, и я пытаюсь проверить, действительна ли моя подпись для новых ключей.И если ключ у меня недействителен, чтобы получить новый ключ и использовать его вместо этого.чтобы добиться этого, у меня есть следующий код:
const token=this.jwtHelper.decodeToken(request.headers.authorization.substr(7));
console.log(token.kid);
try {
this.jwtService.verify(request.headers.authorization.substr(7));
this.userService.getAll()
.then(userList => response.status(HttpStatus.OK).json(userList));
}
catch (error) {
this.httpService.get('http://localhost:5556/auth/keys', token.kid)
.subscribe(Response => {
const pubKeyList = Response.data;
console.log(pubKeyList);
var i: number;
for (i = 0; i < pubKeyList.keys.length; i++) {
if (pubKeyList.keys[i].kid == token.kid) {
const pubKey = pubKeyList.keys[i];
console.log(pubKey);
const newkey = KeyChange.jwk2pem(pubKey);
console.log(newkey);
fs.writeFileSync('./src/certs/client.key.pub', newkey);
JwtModule.register({publicKey: newkey});
break;
}
}
this.jwtService.verify(request.headers.authorization.substr(7), { algorithms: ['RS256'] });
this.userService.getAll()
.then(userList => response.status(HttpStatus.OK).json(userList));
});
}
}
Но всякий раз, когда он приходит снова, чтобы проверить, я получаю ошибку, что у меня неверная подпись.Я проверил и убедился, что ключ сохранен правильно и что полученный ключ является действительным открытым ключом, использующим jwt.io, но я не могу заставить модуль JWT распознать новый ключ после его записи в файл.