2

尝试从 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);
});

配置是这样设置的:

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

非常感谢任何对解决问题的帮助。

4

1 回答 1

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。

于 2020-06-27T07:31:21.623 回答