我有一个node js应用程序,我们在其中使用了带有passport身份验证的azure登录。
我已经使用azure成功登录,应用程序运行正常。
但是,当我注销并将url提供给一个页面时,它会检查身份验证并自动转到该页面而不要求登录。
登录后,我的url包含以下查询字符串
一。会话状态
2.代码
三。状态
四。代币
登录代码:

app.get('/login', passport.authenticate('azuread-openidconnect', { failureRedirect: '/' }), function (req, res) {
res.sendFile(path.join(__dirname+'/index.html'));

});
注销代码:
app.get('/logout', function (req, res) {
    req.session.destroy();
    req.logout();
    res.redirect('/');
});

当我注销时,页面将重定向到我的索引页。然后,当我给url赋予'/login'时,它将带我进入页面,而不必登录页面
请帮忙离开这…

最佳答案

此问题是由OAuth 2.0的授权代码授权流引起的。类似于azure ad oauth 2.0服务上有任何会话。这不是passportjsexpressjs的问题。
我们可以进行以下简单的测试,在浏览器中访问身份验证端点,https://login.microsoftonline.com/common/oauth2/authorize?response_type=id_token%20code&client_id=<client_id>&redirect_uri=<redirect_uri>&response_mode=query&scope=openid
您首先需要填写电子邮件和密码,完成登录流程后,第二次访问终结点时,您将不再需要填写电子邮件或密码。
我们可以在授权端点中将url参数prompt设置为login,以强制用户每次重新验证。
详情请参阅https://msdn.microsoft.com/en-us/library/azure/dn645542.aspx#code-snippet-3
但是在azure passport oidcstrategy中,我们应该修改源代码,以便将参数添加到端点中。
安装passport-azure-ad模块后,打开文件/node_modules/passport-azure-ad/lib/passport-azure-ad/oidcstrategy.js,在第545行(或多或少),可以找到以下代码段:

      var params = {};
      if (self.authorizationParams) { params = self.authorizationParams(options); }
      params['response_type'] = config.responseType;
      log.info('We are sending the response_type: ', params['response_type']);
      params['client_id'] = config.clientID;
      params['redirect_uri'] = callbackURL;
      ...

我们可以在代码片段后面添加句子params['prompt'] = 'login';来添加支持。
如有任何疑问,请随时通知我。
编辑
有没有什么方法只在我注销时提示登录…
我不确定您的意思是,您想检查用户访问login路由时是否经过身份验证,如果是,不提示登录流?
如果是,您可以定制一个中间件来检查经过身份验证的。例如。:
function checkAuthenticatedOnLogin(req,res,next){
  if (!req.isAuthenticated()) {
    return next();
  }else{
    res.send('do not need login');
  }
}

app.get('/login',checkAuthenticatedOnLogin,
  passport.authenticate('azuread-openidconnect',{ failureRedirect: '/login' }),
  function(req, res) {
    log.info('Login was called in the Sample');
    res.redirect('/');
});

关于node.js - 注销Azure Passport身份验证 Node js,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36054116/

10-16 21:23