Перенаправление не работает после выхода из idP - PullRequest
0 голосов
/ 21 апреля 2020

Я новичок в SSO и Saml. В настоящее время я использую последнюю версию passport-saml 1.3.3.

У меня есть следующий код, который отлично работает при входе в систему, но не перенаправляет после успешного выхода из системы.

const strategy = new Strategy({
  name: 'saml',
  passReqToCallback: true, // makes req available in callback
  issuer: '90847811-fd44-41a3-9e49-ac50bef0ec66',
  entryPoint: 'https://someIdp.com/saml2',
  callbackUrl: 'http://localhost:3000/sso/samlPostback',
  logoutUrl: 'https://someIdp.com/saml2',
  logoutCallbackUrl: 'http://localhost:4200/app/login',
},
  (req, profile, done) => done(null, profile)
);

router.get('/login', async (req, res, next) => {
  // some logging and logic things here
  passport.authenticate('saml', {
    successRedirect: '/app',
    failureRedirect: '/app/login/failed',
  })(req, res, next);
});

router.post('/samlpostback', (req, res, next) => {
  // some logging and logic things here
  passport.authenticate('saml', {
    failureRedirect: '/app/failed',
    failureFlash: true
  })(req, res, next);
}, 
  (req, res, next) => res.redirect('/app/login/successful')
);

router.get('/logout', async (req, res, next) => {
  if (req.user === null) {
    return res.redirect('/app/login');
  }
  return strategy.logout(req, (err, uri) => {
    if (err) return res.status(500).send(err);

    req.logout();
    return res.send(uri);
  });
});

После того, как я go прошел через исходный код passport-saml, я заметил, что функция generateLogoutRequest на https://github.com/bergie/passport-saml/blob/master/lib/passport-saml/saml.js#L272 вообще не проверяла или не использовала logoutCallbackUrl.

Я начинаю задумываться, реализую ли я мой код неправильно или проблема с паспортом?

Ниже представлен saml для выхода из системы, сгенерированный passport-saml.

<?xml version="1.0"?>
  <samlp:LogoutRequest
      Destination="https://someIdp.com/saml2"
      ID="_43c2e53345083923269d" IssueInstant="2020-04-21T03:04:17.893Z" Version="2.0"
      xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
      xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
      <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">90847811-fd44-41a3-9e49-ac50bef0ec66</saml:Issuer>
      <saml:NameID>myemail@abc.com</saml:NameID>
  </samlp:LogoutRequest>

Я не знаком с Saml, поэтому не уверен, что в нем отсутствует информация о перенаправлении. Если да, как это должно выглядеть? Может, он подскажет мне, как это исправить.

Нужно ли что-то делать со стороны сервера IDP?

...