it-swarm.com.de

Nodejs Passport-Authentifizierungstoken

Ich schreibe eine NodeJS-Anwendung, die ich sowohl als Webanwendung als auch als API-Anbieter verwenden möchte. Sobald ein Benutzer authentifiziert ist, möchte ich diesem Benutzer ein Token zuweisen, das für nachfolgende Anforderungen verwendet wird. Dies funktioniert hervorragend mit Passport für die Webanwendung, da ich den Benutzer nur mit dem Token in der Sitzung serialisiere und deserialisiere. Bei der Beantwortung von API-Anfragen muss jedoch kein Cookie zum Speichern der Sitzungsinformationen festgelegt werden. Im Idealfall sucht Passport sowohl in der Sitzung als auch im Anfragetext nach dem Token. Gibt es eine Möglichkeit, Passport zu konfigurieren, um dies zu erreichen?

70
Austin

Verwenden Sie den Zugriffstoken einfach bei jeder Anforderung. Die Verwendung einer Sitzung ist NICHT erforderlich. Das Folgende ist der Workflow:

POST /signin
  1. Der Benutzername und das Passwort sind in der Kundenanfrage angegeben.
  2. Der Server authentifiziert den Benutzer mithilfe der lokalen Strategie von Passport. Siehe passport-local .
  3. Wenn die Anmeldeinformationen einen gültigen Benutzer darstellen, gibt der Server das von einem Generator generierte Zugriffstoken zurück. node-jwt-simple ist eine gute Wahl.
  4. Wenn die Anmeldeinformationen ungültig sind, leiten Sie zu /signin Weiter.

Wenn der Client das Zugriffstoken vom Autorisierungsserver erhält, kann er Anforderungen an geschützte Ressourcen auf dem Server senden. Beispielsweise:

GET /api/v1/somefunction?token='abcedf'

  1. Der Client ruft eine Server-API mit dem Token-Argument auf.
  2. Der Server authentifiziert das Token mithilfe der Bearer-Strategie des Passes. Siehe Pass-http-Inhaber .

Referenzen

Erstellen Sie eine sichere oauth API mit passport.js und express.js (node.js)

128
bnuhero

Wie bnuhero erwähnt, braucht man keine Sitzungen (obwohl dieser Ansatz auch seine Vorzüge hat). Hier ist ein Boiler-Plate-Projekt, mit dem ich gerade beginne: https://github.com/roblevintennis/passport-api-tokens

Hier ist eine alternative und leicht zu befolgende Anleitung (aber sie verwendet Sessions). Könnte ein netter Querverweis sein: http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local

Und noch eine Referenz: http://mherman.org/blog/2013/11/11/user-authentication-with-passport-dot-js/

7
Rob

Sie können die Methode isAuthenticated () in passport in nodejs verwenden. Auf jeder Route können Sie überprüfen, ob (req.isAuthenticated ()) und wenn es bereits authentifiziert ist, können Sie auf die Route zugreifen, oder Sie können jede andere Ausführung in else-Block umleiten oder ausführen. In Passport können Sie done (null, user) für eine erfolgreiche Anmeldung zurückgeben und die Daten werden im Cookie gespeichert, bis die Sitzung beendet ist. In Benutzer können Sie Informationen über den Benutzer wie E-Mail, Passwort.

app.get('/home', (req, res) =>{
    if(req.isAuthenticated()){
        //render home page
    } else {
        // go back to the login page or throw soome error
    }
}) 
0
Anuj Kumar