Получение и хранение access_token с паспортом - PullRequest
0 голосов
/ 26 августа 2018

Я использую PassportJS вместе с openid-client и cookie-session на моем сервере Express для аутентификации.Я использую openid-client «Использование с паспортом» в качестве отправной точки, и в настоящее время я могу успешно пройти аутентификацию.Так как мне нужен токен доступа для API, которые проксируются через мой сервер, я решил сохранить токен доступа в своей пользовательской сессии с помощью следующего бита кода:

passport.use(
  'oidc',
  new Strategy(
    { client, params, passReqToCallback, sessionKey, usePKCE },
    (req, tokenset, userinfo, done) => {
      logger.info('Retrieved tokenset & userinfo');
      // Attach tokens to the stored userinfo.
      userinfo.tokenset = tokenset;
      return done(null, userinfo);
    }
  )
);

Мой следующий шаг - получить и сохранитьтокен нового доступа.Часть информации, которая поставляется с tokenset, является клавишей expires_at, и срок ее действия истекает через один час.Поэтому, конечно, если он близок к истечению или истек, я хочу получить новый токен.

В документации сказано использовать:

client.refresh(refreshToken) // => Promise
  .then(function (tokenSet) {
    console.log('refreshed and validated tokens %j', tokenSet);
    console.log('refreshed id_token claims %j', tokenSet.claims);
});

Хорошо, я понимаю, и у меня естьэтот кусок кода работает также.Но я понятия не имею, как сохранить его обратно в сеанс пользователя.Если я сделаю следующий вызов API, который проксируется через мой сервер, у меня все еще будет старый токен в req.session.passport.user.tokenset.access_token.Итак, как мне обновить это?

(я, вероятно, должен указать, что я все еще очень плохо знаком с аутентификацией OpenID / Oauth, а также с самим Passport, поэтому некоторые из моих действий могут быть совершенно очевидны.)

...