首页 > 解决方案 > 使用 Passport 检索和存储 access_token

问题描述

我在我的 Express 服务器中使用 PassportJS 进行身份验证。我正在使用“使用 Passport”作为起点,我目前能够成功进行身份验证。由于我需要通过服务器代理的 API 的访问令牌,因此我选择使用以下代码将访问令牌保存在我的用户会话中:openid-clientcookie-sessionopenid-client

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);
    }
  )
);

我的下一步是获取并存储一个新的访问令牌。附带的部分信息tokensetexpires_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 本身还是很陌生,所以我正在做的一些事情可能是完全显而易见的。)

标签: expresspassport.jsopenid

解决方案


推荐阅读