Я использую 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, поэтому некоторые из моих действий могут быть совершенно очевидны.)