我正在使用Express服务器中的PassportJS和openid-client
和cookie-session
进行身份验证。我以openid-client
的{{3}}作为起点,目前可以成功进行身份验证。由于我需要通过服务器代理的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本身还是很陌生,所以我所做的某些事情可能是完全显而易见的。)