Переназначение ключей модуля Nest JS jwt - PullRequest
0 голосов
/ 12 октября 2018

Я импортировал модуль @ 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 распознать новый ключ после его записи в файл.

...