Как получить удаленный ключ publi c и периодически хранить его на сервере Apollo graphql? - PullRequest
0 голосов
/ 10 февраля 2020

Я запустил сервер Apollo graphql. Я хочу проверить JWT, отправленный клиентом Firebase. Согласно этому документу мы можем получить публичные c ключи для проверки. Это также дает max-age, до которого мы можем хранить ключ. Я использую Auth0- nodejs для проверки JWT. Моя проблема заключается в том, как периодически получать этот ключ publi c и сохранять его в переменной nodejs на сервере Apollo, чтобы мне не приходилось извлекать ключи из firebase для каждого запроса на сервере apollo.

const server = new ApolloServer({
schema, context: ({ req }) => {
const token = req.headers.authorization;
const user = getAuthorizedUser(token);
return { user };
}
});

server.listen();

Здесь getAuthorizedUser (токен) должен каждый раз получать по новому запросу ключи publi c с удаленного сервера. Это может замедлить мое приложение. Я не уверен, как я могу периодически получать данные с удаленного сервера и использовать их для каждого запроса на моем сервере.

1 Ответ

1 голос
/ 10 февраля 2020

Вы могли бы просто получить их лениво. Что-то вроде:

let keys
let expiresAt = 0

async function getPublicKeys () {
  if (expiresAt < Date.now()) {
    try {
      const { maxAge, publicKeys } = await getKeysFromFirebase()
    catch (e) {
      // Handle being unable to fetch the keys from Google -- either retry or throw
    }
    expiresAt = (maxAge * 1000) + Date.now() - arbitraryPadding
    keys = publicKeys
  }
  return keys
}

За исключением этого, ваше приложение может перезапустить их до истечения срока их действия, используя setTimeout - вам просто нужно убедиться, что ваш таймер очищен при выходе из процесса. Вы также можете настроить работу cron, которая будет периодически записывать ключи в файл.

...