2016-05-27 9 views
0

Ich schreibe eine einzelne Seite Web-App mit express und react.
Ich versuche jetzt, den Weg zur Authentifizierung meiner Benutzer zu wählen. sie registrieren und melden Sie sich an, lassen mit E-Mail und Passwort ein und 3rd-Party-Anbieter wie Facebook, Google etc
Ich möchte ...Wie Node Express mit Reisepass-Anbietern und JWT kombinieren?

las ich einige Artikel über passport und jwt (express-with-passport, jwt-with-passport), aber keiner von ihnen kombiniert jwt und Drittanbieter.

Die einzige Art, wie ich denken konnte, ist die Tokens in meinem db zu speichern, und für jede Anforderung ihnen (Token durch eine dritte Partei und Token von mir mit jwt erzeugt bereitgestellt)

Speichern der Token zum Vergleich von ein Provider in meinem db und vergleichen mit jeder Anfrage macht Sinn, aber mit jwt Ich muss nur das Token verifizieren, ohne auf die db zuzugreifen.
Wie kann ich die Tokens unterscheiden, die ich vom Client erhalte? Wie kann ich feststellen, wann auf die db zugegriffen werden muss (für Provider-Tokens) und wann mit jwt?

EDIT:

Die Art und Weise der Umsetzung ich darüber nachdachte, ist wie folgt:
- Nickname & Passwort: Nach der Anmeldung ein Token generiert (mit jwt) und an den Client senden. Jede Anfrage enthält das Token und der Server wird es überprüfen.
- Drittanbieter: Nehmen wir an, der Benutzer wird mit Facebook authentifiziert. Mein Server erhält das Token (passport-js) von Facebook. Jetzt muss ich dem Kunden sein Token senden. Ich könnte das Token senden, das ich gerade von Facebook bekommen habe, aber wie kann ich dann das Token überprüfen, das der Kunde mir später auf jede Anfrage schickt?
So könnte ich wieder ein Token mit jwt generieren und funktionieren wie oben beschrieben.

Ist das eine gute Implementierung oder fehle ich etwas? Ich konnte ein vollständiges Tutorial nicht finden, das all diese Aspekte beschreibt.

+0

versuchen Sie, mehr Beschreibung zu geben, was Sie nicht verstehen –

Antwort

0

Anstatt ein Token zu verwenden, das ein Identity-Provider Ihnen geben könnte, könnten Sie Ihre eigenen Token basierend auf einem erfolgreichen Login-Callback für Ihre Anwendung erstellen. Geben Sie bei jeder Anforderung für das gleitende Ablaufdatum neue Tokens aus, und berücksichtigen Sie möglicherweise die Verwendung von refresh tokens.

In Ihrer Datenbank können Sie die Authentifizierungsmethode für einen bestimmten Benutzer (Facebook/Google/usw.) speichern, wenn sie sich anmelden. Wenn Sie eine Anfrage mit einem ungültigen Token erhalten, fragen Sie diese Authentifizierungsmethode aus der Datenbank ab. Leiten Sie sie anschließend zur erneuten Authentifizierung an den jeweiligen Identitätsanbieter um.

Dies vermeidet DB-Lookups für die meisten "normalen" JWT-Validierungen für Ihre App und bietet Ihnen alle Vorteile der Statuslosigkeit des Tokens.