首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >passport-azure-ad Single Sign On (SSO)

passport-azure-ad Single Sign On (SSO)
EN

Stack Overflow用户
提问于 2020-07-22 04:55:46
回答 1查看 1.1K关注 0票数 1

我正在尝试通过Azure AD为我的网站设置身份验证,这些网站是使用passport-azure-ad包使用React、NodeJS和Express构建的。身份验证工作成功,我能够对令牌进行身份验证并检索令牌,但即使我在admin.microsoft.com或sharepoint.mytenant.com上登录了会话,登录时也会显示登录提示。我知道passport-azure-ad文档说可以使用单点登录,但我还没有找到任何关于如何设置它的指导。

passport策略:

代码语言:javascript
复制
passport.use(new OIDCStrategy(
  {
    identityMetadata: `${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,
    passReqToCallback: false,
    scope: process.env.OAUTH_SCOPES.split(' ')
  },
  signInComplete
));

signInComplete:用户当前存储在内存中,而不是db中。使用simple-oath2。

代码语言:javascript
复制
async function signInComplete(iss, sub, profile, accessToken, refreshToken, params, done) {
  if (!profile.oid) {
    return done(new Error("No OID found in user profile."));
  }

  try{
    console.log('in here');
    const user = await graph.getUserDetails(accessToken);

    if (user) {
      // Add properties to profile
      profile['email'] = user.mail ? user.mail : user.userPrincipalName;
    }
  } 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]);
}

授权功能:

代码语言:javascript
复制
/* GET auth callback. */
router.get('/signin',
  function  (req, res, next) {
    passport.authenticate('azuread-openidconnect', 
      {
        response: res,
        prompt: 'login',
        failureRedirect: '/',
        successRedirect: '/'
      }
    )(req,res,next);
  }
);

// <CallbackRouteSnippet>
router.post('/callback',
  function(req, res, next) {
    passport.authenticate('azuread-openidconnect',
      {
        response: res,
        failureRedirect: '/',
        successRedirect: '/'
      }
    )(req,res,next);
  }
);
// </CallbackRouteSnippet>

router.get('/signout',
  function(req, res) {
    req.session.destroy(function(err) {
      req.logout();
      res.redirect('/');
    });
  }
);

感谢您的帮助,谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-07-31 04:18:36

请参考此示例,它可能会帮助您https://github.com/AzureAD/passport-azure-ad

示例passport- Azure -ad已经过测试,可以与Microsoft Azure Active Directory和Microsoft Active Directory联合身份验证服务一起使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63022963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档