使用护照saml注销Idp会话

时间:2019-05-24 11:06:16

标签: javascript node.js express passport.js passport-saml

尝试从idp会话注销用户时收到400错误的请求。 用户已从应用程序/护照会话注销,但没有从idp会话注销。

注销和回调端点的设置如下所示。注销端点附加必需的属性以注销用户并创建SAMLRequest。

app.get('/api/logout', (req, res) => {
  const currentUser = getCurrentUser(req);
  const user = {
    nameID: currentUser.nameID,
    nameIDFormat: currentUser.nameIDFormat,
    sessionIndex: currentUser.sessionIndex,
  };
  req.user = user;

  return strategy.logout(req, function(err, uri) {
        res.redirect(uri);
  });
});

app.post('/api/logout/callback', (req, res) => {
  req.logout();
  // res.redirect(uri);
});

config的设置如下:

const strategy = new SamlStrategy(
  {
    callbackUrl: process.env.CALLBACK_URL,
    entryPoint: process.env.ENTRY_POINT,
    issuer: process.env.ISSUER,
    logoutUrl: process.env.LOGOUT_URL,
    logoutCallbackUrl: process.env.LOGOUT_CALLBACK_URL,
  },
  strategyCallback,
);

非常感谢您提供解决问题的帮助。

1 个答案:

答案 0 :(得分:1)

是的,idp会话不清楚,因为您尚未使用SAML协议注销。使用req.logout不会清除Idp上的会话。只能清除您的应用程序会话。

你能做的是

      samlStrategy.logout(req, function(err, request){
          if(!err){
           //redirect to the IdP Logout URL
           res.redirect(request);
         }
      });

这将重定向到idp注销页面,您应该为idp提供注销回调URL。成功注销后,Idp将重定向到回调URL。