Retrieving & storing access_token with Passport

Viewed 998

I'm using PassportJS along with openid-client and cookie-session in my Express server for authentication. I'm using openid-client's "Usage with Passport" as a starting point, and I'm currently able to authenticate successfully. Since I need an access token for APIs that are proxied through my server, I chose to save the access token in my user session with this bit of code:

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

My next step is to get and store a new access token. Part of the information that comes with tokenset is the expires_at key, and it's set to expire in one hour. So of course, if it's close to expiring or has expired, I want to get a new token.

The documentation says to use:

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

Okay, I understand that and I have that bit of code working as well. But I have no idea how to save it back into my user session. If I make a subsequent API call that's proxied through my server, I'll still have the old token in req.session.passport.user.tokenset.access_token. So how do I update that?

(I probably should put as a caveat I'm still very new to OpenID / Oauth authentication as well as Passport itself, so some of what I'm doing may be completely obvious.)

0 Answers
Related