Выход из системы с использованием passport-saml: req.logout () или Strategy.logout () или обоих?

У меня есть вопрос относительно правильного способа выхода пользователя из системы при использовании passport-saml для аутентификации.

Пример сценария с passport-saml показывает выход из системы следующим образом:

app.get('/logout', function(req, res){
  req.logout();
  res.redirect('/');
});

Насколько я могу судить, это завершит сеанс локального паспорта, но, похоже, он не отправляет запрос на выход из системы SAML IdP. Когда пользователь делает еще одну регистрацию, он перенаправляет на IdP, но сразу же перенаправляет обратно аутентифицированному пользователю. Есть ли способ выйти из IdP, чтобы пользователь снова вводил свой пароль при входе на мой сайт? Я видел, что другие сайты, которые используют наш IdP, делают это, поэтому я думаю, что это возможно.

Я заметил в паспортном коде Saml, что естьlogout() метод объекта стратегии passport-saml, который, кажется, не вызываетсяreq.logout(), Поэтому я попытался переключить код на это:

app.get('/logout', function(req, res) {
    //strategy is a ref to passport-saml Strategy instance 
    strategy.logout(req, function(){
        req.logout();
        res.redirect('/');
    });
});

Но я получил эту ошибку глубоко в XMLNode.js

Error: Could not create any elements with: [object Object]
   at XMLElement.module.exports.XMLNode.element (/.../node_modules/passport-saml/node_modules/xmlbuilder/lib/XMLNode.js:74:15)
   at XMLElement.module.exports.XMLNode.element (/.../node_modules/passport-saml/node_modules/xmlbuilder/lib/XMLNode.js:54:25)
   at XMLElement.module.exports.XMLNode.element (/.../node_modules/passport-saml/node_modules/xmlbuilder/lib/XMLNode.js:54:25)
   at new XMLBuilder (/.../node_modules/passport-saml/node_modules/xmlbuilder/lib/XMLBuilder.js:27:19)
   at Object.module.exports.create (/.../node_modules/passport-saml/node_modules/xmlbuilder/lib/index.js:11:12)
   at SAML.generateLogoutRequest (/.../node_modules/passport-saml/lib/passport-saml/saml.js:169:21)

Я не вызываю этот метод правильно? Или я не должен вызывать этот метод напрямую и вместо этого вызывать какой-то другой метод?

Я вижу это вgenerateLogoutRequest() это относится к двум свойствам наreq.user что я не уверен там

  'saml:NameID' : {
    '@Format': req.user.nameIDFormat,
    '#text': req.user.nameID
  }

Если этих свойств нет, это вызовет эту ошибку? Если это так, я предполагаю, что, возможно, мне нужно убедиться, что эти свойства добавлены к объекту пользователя, который возвращается из функции проверки обратного вызова?

Спасибо за любую помощь, которую кто-либо может оказать в этом.

Ответы на вопрос(1)

Ваш ответ на вопрос