2016-01-08 7 views
5

ich eine Express-Anwendung eingerichtet haben und einen Rat benötigen Token auf Speichern.Knoten Express - Speicherung und den Abruf von Authentifizierungs-Token

Ich erhalte ein Zugriffstoken von einem OAuth 2-Server nach einem Benutzerkonto zu authentifizieren, die ich dann für die nachfolgenden api Anfragen verwenden muß.

Ich möchte den Token-Wert vom Client ausblenden, und ich glaube eine Möglichkeit, das Token auf dem Server in einem codierten Cookie zu speichern, so dass bei weiteren Anfragen diese über Middleware und die Cookie kann dann zum Abruf der Token-gespeicherten Server-Seite verwendet werden und dann als Header-Wert in der laufenden Anfrage an den eigentlichen API-Endpunkt verwendet werden.

Jemand hat diese Frage tatsächlich gestellt - How to store an auth token in an Angular app Das ist genau der Fluss, mit dem ich in meiner Anwendung arbeite, aber die Antwort spricht davon, einen Angular-Dienst zu benutzen, und ich bin mir nicht sicher, ob ich das tun möchte können alle von Express behandelt werden, so dass der clientseitige Code nicht über das Token informiert werden muss, nur irgendwelche Fehler, die der API-Server zurückgibt.

So Zusammenfassung der Strömung denke ich, ich brauche:

  • Benutzerberechtigungsnachweise
  • OAuth 2 Server zurückZugriffsToken
  • Token gespeichert wird irgendwo in Express, verkeilt durch eine ID von Sorten
  • anmelden einreicht
  • Ein Cookie wird generiert und als Antwort an den Client zurückgesendet. Cookie enthält Token-Wert möglicherweise codiert? Oder vielleicht die ID von Token-Wert in Express-Middleware-Komponente gespeichert?
  • -Client macht eine api Anfrage, die Middleware-Express Route abholt.
  • Express prüft auf das Vorhandensein von Plätzchen und entweder dekodiert das Token-Wert, oder irgendwie abruft vom Speichermechanismus Serverseite.
  • Token-Wert wird dann als Kopf zwischen Express- und endgültigem api Endpunkt verwendet

ist wahrscheinlich bereits Middleware gibt, die dieses Ding irgendwie behandelt, habe ich schon PassportJS gesehen, die das Ding irgendwie zu sein scheint, kann ich möchte ich verwenden, aber ich bin mir nicht sicher, ob es den OAuth2-Tokenfluss auf dem Server behandelt, gegen den ich arbeite (password grant), und stattdessen eher für den OAuth-Flow der Weiterleitungsanmeldung geeignet zu sein scheint.

Ich brauche sicherlich irgendwo, um den Token-Wert in Express zu speichern, also irgendeine Form von Speicher (nicht im Speicher, glaube ich nicht).

Ich bin ziemlich neu so Express irgendwelche Vorschläge zu schätzen wissen würde \ Ratschläge, wie man diesen Ansatz.

Dank

+0

Wenn Sie ein Token vom Oauth2-Server erhalten, können Sie es auf der Benutzerseite speichern. Sie können Cookie oder localstorage HTML 5 verwenden. – trquoccuong

+0

Ok, gut der Cookie-Ansatz ist, was ich denke, aber es müsste den Wert des Tokens zurück auf den Client zu kodieren und dann wird dies jedes Mal für nachfolgende Anfragen von Express zu entschlüsseln der endgültige Endpunkt. – mindparse

Antwort

5

Der sicherste Weg, dies genauso wie beschrieben zu tun ist:

  • ein OAuth-Token von einem Dritten Dienst (Google, Facebook, was auch immer) holen.
  • Erstellen Sie ein Cookie Express verwenden, und zu speichern, die in der Cookie-Token. Stellen Sie sicher, dass Sie auch die Cookie-Flags secure und httpOnly setzen: Dadurch wird sichergestellt, dass der Cookie nicht vom clientseitigen JavaScript-Code gelesen werden kann oder über eine Nicht-SSL-Verbindung.
  • Jedes Mal, wenn der Benutzer eine Anfrage an Ihre Site sendet, kann dieser Cookie von Ihrer Middleware in Express gelesen und verwendet werden, um alle API-Aufrufe auszuführen, die Sie für den Dienst des Drittanbieters benötigen.

Wenn Ihr Service auch asynchrone Anforderungen machen muss, um Google/Facebook/usw., wenn der Benutzer aktiv ist NICHT auf Ihrer Website zu klicken, um, sollten Sie auch ihre Token speichern in Ihrer Benutzerdatenbank irgendwo auch - das So können Sie jederzeit im Auftrag des Benutzers Anfragen stellen.

Ich bin der Autor von express-stormpath, eine Node-Auth-Bibliothek (ähnlich Passport), und so machen wir Dinge dort drüben, um maximale Sicherheit zu gewährleisten!