PassPort JS + OIDCStrategy с сеансом с azure redis - PullRequest
0 голосов
/ 02 августа 2020

Я использую плагин https://github.com/AzureAD/passport-azure-ad для работы с Azure AD Graph API.

Я привел пример, приведенный здесь: https://github.com/AzureADQuickStarts/WebApp-OpenIDConnect-NodeJS

Пока мой код работает, все хорошо в разработке. Я хочу реализовать то же самое для производственного использования. И теперь я хочу использовать кеш Azure Redis для достижения того же. Я пытался сделать это по-другому, но почему-то этого не происходит, пожалуйста, посмотрите ниже код, который у меня есть до сих пор

 passport.use('oidc',new OIDCStrategy(
    {
      identityMetadata: `${process.env.OAUTH_AUTHORITY}${process.env.OAUTH_ID_METADATA}`,
      clientID: process.env.OAUTH_APP_ID,
      responseType: 'code id_token',
      responseMode: 'form_post',
      redirectUrl: process.env.OAUTH_REDIRECT_URI,
      allowHttpForRedirectUrl: true,
      clientSecret: process.env.OAUTH_APP_PASSWORD,
      validateIssuer: false,
      passReqToCallback: false,
      scope: process.env.OAUTH_SCOPES.split(' ')
    },
    signInComplete
  ));

async function signInComplete(iss, sub, profile, accessToken, refreshToken, params, done) {
    if (!profile.oid) {
      return done(new Error("No OID found in user profile."));
    }
  //
    try{
      const user = await graph.getUserDetails(accessToken);
      if (user) {
        // Add properties to profile
        profile['email'] = user.mail ? user.mail : user.userPrincipalName;
        console.log(profile['email']);
      }
    } catch (err) {
      return done(err);
    }
  
    // Create a simple-oauth2 token from raw tokens
    let oauthToken = oauth2.accessToken.create(params);
  
    // Save the profile and tokens in user storage
    users[profile.oid] = { profile, oauthToken };
    return done(null, users[profile.oid]);
  }

Я знаю, что в redisClient есть параметры get и set для его использования, но я я действительно не уверен, где и как мне реализовать то же самое. Пока я знаю, что могу использовать

 passport.authenticate('oidc');

и использовать то же самое в

router.post('/checkAuth',passport.authenticate('oidc'), (req, res,next)=> {

Любые предложения или указатели будут очень признательны.

...