2017-07-03 8 views
4

Ich baue eine Anwendung mit ExpressJS, Mongodb (Mogoose). Die Anwendung enthält Routen, auf denen der Benutzer authentifiziert werden muss, bevor er darauf zugreift.Soll ich JWT-Token in Redis speichern?

Derzeit habe ich eine Express-Middleware geschrieben, um das gleiche zu tun. Hier mache ich mit Hilfe von JWT-Token eine mongodb-Abfrage, um zu überprüfen, ob der Benutzer authentifiziert ist oder nicht. Aber ich denke, das könnte unnötige Anforderungen an meine Datenbank stellen.

sollte ich redis für diese spezielle Aufgabe integrieren?
verbessert es die API-Leistung? oder sollte mit bestehenden mongodb Ansatz gehen?

wäre hilfreich, wenn ich mehr Einblicke dazu bekommen würde.

+0

Warum müssen Sie die JWT-Token speichern? Wird JWT nicht für die zustandslose Authentifizierung verwendet, bei der die Tokens nicht auf der Serverseite gespeichert werden müssen, sondern Sie die Clients behalten können und Sie nur die Signatur überprüfen müssen, um zu sehen, ob die Daten authentisch sind. Der Vorteil von Stateless auf der Serverseite ist also, dass Sie sich nicht um die sitzungsbezogenen Probleme kümmern müssen, sondern nur umgekehrt. –

+0

@Redisson_RuiGu Danke, verstanden Sie Ihren Standpunkt. Was ist der richtige Weg, um Benutzer zu finden ist authentifiziert oder nicht, 1) wenn nach jwt.verify() gibt einige gültige Token (ich glaube, das ist genug), 2) oder sollte ich dieses Token und gegen mit Datenbank (I denke, das ist etwas teuer)? –

+0

Sie können die Benutzerrolle und andere Informationen in der Payload-Sektion behalten, dann können Sie bei der Überprüfung des Token herausfinden, ob er/sie authentifiziert ist. Ein nicht authentifizierter Benutzer hat nur keinen. –

Antwort

3

TLDR: Wenn Sie die Fähigkeit, das Token an einem bestimmten Punkt widerrufen wollen, ja, speichern Sie es in etwas schnell wie Redis.

Einer der gut dokumentierten Nachteile der Verwendung von JWT ist, dass es keine einfache Möglichkeit gibt, ein Token zu widerrufen, wenn beispielsweise ein Benutzer ausgeloggt werden muss oder das Token kompromittiert wurde. Das Aufheben eines Tokens würde bedeuten, es in einem Speicher nachzuschlagen und dann zu entscheiden, was als nächstes zu tun ist. Da einer der Punkte von JWT es ist, Rundreisen zur db zu vermeiden, wäre ein guter Kompromiss, es in etwas weniger Besteuerem als einem Rdbms zu speichern. Das ist ein perfekter Job für Redis.

+0

Danke, ich habe den gleichen Ansatz gewählt. Hier verwende ich redis, um alle aktiven Benutzer zu verfolgen (im Token-Paar: ID verwenden). Erstellen Sie außerdem die Middleware, um die Benutzeranforderung zu validieren. Diese Middleware prüft, ob das Token gültig ist und in redis verfügbar ist oder nicht, der Benutzer kann nur dann auf die authentifizierte Ressource zugreifen, wenn diese Bedingung erfüllt ist. –

0

Sie können Redis zum Speichern von JWT-Etiketten verwenden. Redis ist viel bequemer zum Speichern solcher Daten. Die Anfrage an Radieschen sollte die Leistung nicht stark beeinträchtigen. Sie können versuchen, die Bibliothek jwt-redis

Verwandte Themen