Mit passport-saml abmelden: req.logout () oder Strategy.logout () oder beides?

Ich habe eine Frage zum richtigen Abmelden eines Benutzers, wenn ich passport-saml zur Authentifizierung verwende.

Das Beispielskript mit passport-saml zeigt das Abmelden wie folgt:

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

Soweit ich weiß, wird hierdurch die lokale Passport-Sitzung beendet, es wird jedoch keine Abmeldeanforderung an den SAML-IdP gesendet. Wenn der Benutzer ein weiteres Login vornimmt, wird er zum IdP umgeleitet, aber sofort zum authentifizierten Benutzer zurückgeleitet. Gibt es eine Möglichkeit, sich mit dem IdP abzumelden, sodass der Benutzer sein Kennwort erneut eingeben muss, wenn er sich bei meiner Site anmeldet? Ich habe gesehen, dass andere Websites, die unseren IdP verwenden, dies tun, daher denke ich, dass dies möglich ist.

Ich habe im Pass-Saml-Code bemerkt, dass es eine gibtlogout() Methode für das passport-saml Strategy-Objekt, das nicht aufgerufen zu werden scheintreq.logout(). Also habe ich versucht, den Code auf diesen umzustellen:

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

Aber ich habe diesen Fehler tief in XMLNode.js bekommen

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)

Rufe ich diese Methode nicht richtig auf? Oder sollte ich diese Methode nicht direkt aufrufen und stattdessen eine andere Methode aufrufen?

Ich sehe das ingenerateLogoutRequest() Es bezieht sich auf zwei Eigenschaften auf derreq.user das bin ich mir nicht sicher sind da:

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

Wenn diese Eigenschaften nicht vorhanden sind, verursacht dies diesen Fehler? Wenn ja, gehe ich davon aus, dass ich möglicherweise sicherstellen muss, dass diese Eigenschaften dem Benutzerobjekt hinzugefügt werden, das von der Rückruffunktion "Verify" zurückgegeben wird.

Vielen Dank für jede Hilfe, die jemand leisten kann.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage