Я новичок в 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?