Ich benutze die JWT, um Knoten js URLs zu schützen Ссылка
Um eine JWT-Token-Benutzersitzung zu erstellen, mache ich einfach:
%Vor%ODER im Falle eines Login-Anrufs
%Vor% Jedes Mal, wenn eine geschützte URL aufgerufen wird, suche ich nach req.user
, das von der JWT-Middleware automatisch eingerichtet wird.
Nun frage ich mich:
1 - Wo werden JWT-Tokens beim Aufruf von sign () gespeichert?
2 - Muss ich das Token jedes Mal verifizieren (), wenn eine geschützte URL aufgerufen wird? wenn ja warum?
3 - Wenn ich ein neues Token für einen bereits signierten Benutzer einstelle, wird das alte Token (falls vorhanden) gelöscht? Was ist, wenn das Ablaufdatum nicht festgelegt wurde oder beispielsweise 5 Jahre beträgt?
4 - Warum kann ich keine neuen Tokens auf derselben Browser- / App-Seite setzen? Ich erhalte einen ungültigen Signaturfehler, wenn ich ein neues Token registriere, aber das Token übereinstimmt (ich habe es geprüft) Es ist, als könnte ich nicht mehr als 1 Benutzer im selben Browser anmelden
Sie müssen die Antworten auf alle Ihre vorherigen Fragen bereits anhand der vorherigen Antworten der anderen Benutzer herausgefunden haben, aber ich werde versuchen, die Dinge auch für andere etwas aufzuhellen:
1 - Wo werden JWT-Tokens beim Aufruf von sign () gespeichert?
Wenn Sie signieren, wird das signierte Token nicht irgendwo gespeichert zurückgegeben von der Zeichenfunktion, dann müssen Sie es an den Client senden damit kann auf der Client-Seite gespeichert werden. (z.B. Sitzungsspeicher, lokaler Speicher oder Cookie)
2 - Muss ich das Token jedes Mal verifizieren (), wenn eine geschützte URL aufgerufen wird? wenn ja warum?
Ja, das tust du. Die Idee ist, sobald der Kunde das Token hat, werden sie senden das Token an den Server jedes Mal, wenn sie eine Anfrage stellen. Das Token ist Wird vom Server verarbeitet, um festzustellen, ob ein bestimmter Client vorhanden ist wurde bereits authentifiziert.
3 - Wenn ich ein neues Token für einen bereits signierten Benutzer einstelle, wird das alte Token (falls vorhanden) gelöscht? Was ist, wenn das Ablaufdatum nicht eingestellt ist oder beispielsweise 5 Jahre beträgt?
Etwas mit der Antwort zu Punkt 1 verbunden. Aufruf der Zeichenfunktion wird nur ein weiteres Token generieren. Der Ablauf des Tokens ist innerhalb des signierten Tokens selbst gespeichert. Also jedes Mal, wenn der Server ein Token bekommt vom Client überprüft es das Ablaufdatum als Teil des Tokens Überprüfung. Es ist wichtig zu beachten, dass das signierte Token nur das ist "user_profile" -Objekt, das Sie als Parameter übergeben haben Unterzeichnung, plus zusätzliche Felder wie das Ablaufdatum, die hinzugefügt werden dieses Objekt.
So kann ein Client mehrere Token auf der Client-Seite gespeichert haben. Sie sind alle gültig, solange sie noch nicht abgelaufen sind. Aber die Idee ist, nur ein Token an den Client zu senden, wenn sie es waren erneut authentifiziert, nachdem der alte abgelaufen ist.
4 - Warum kann ich keine neuen Tokens auf derselben Browser / App-Seite setzen? Ich erhalte einen ungültigen Signaturfehler, wenn ich ein neues Token registriere, aber das Token stimmt überein (ich habe es überprüft) Es ist, als ob ich nicht mehr als 1 Benutzer im selben Browser anmelden kann
Die Idee ist, einen Benutzer pro Browser zu haben. Da in diesem Fall der Browser ist der Kunde. Ich kann mir keine Anwendungsfälle vorstellen, in denen Sie das tun müssten Haben Sie mehrere Benutzer pro Browser / Client, so dass Sie es offensichtlich getan haben etwas stimmt nicht. Das heißt nicht, dass es unmöglich ist, mehrere zu senden Token zum selben Browser / Client.
Sie müssen das Token auf der Client-Seite speichern (lokaler Speicher oder Cookie)
Ja. HTTP ist zustandslos. Wenn Sie es nicht jedes Mal überprüfen, kann jemand Ihre URL ohne das Token oder mit einem ungültigen Token aufrufen. Wenn Sie sich Sorgen um die Leistung machen, ist eine HMACSHA256-Prüfung sehr schnell.
Das macht keinen Sinn, Sie müssen etwas falsch machen.
2 - Muss ich das Token immer verifizieren, wenn eine geschützte URL vorhanden ist? namens? wenn ja warum?
Ja. Aber "verify" ist ein etwas verwirrender Begriff.
Während der Token-Verifizierung ist keine Datenbankprüfung der Benutzeranmeldeinformationen erforderlich, da der Server dem empfangenen und verifizierten (erfolgreich entschlüsselten) Token vertrauen muss. Zur Identifizierung des Benutzers ist kein Speicher für Serversitzungen erforderlich.
Sie können sich JWT-Token wie eine einfache Sitzungsinformation vorstellen, die verschlüsselt auf dem Client gespeichert ist. Aber wenn Sie mehr Daten in einer Benutzersitzungs-Information zwischenspeichern müssen, brauchen Sie, denke ich, noch eine Art Sitzungsspeicher auf einem Server, was die JWT-Idee im Vergleich zur herkömmlichen Sitzungs-ID in Cookies fast nutzlos macht.
Entschuldigung. Dies sollte ein Kommentar zur vorherigen Antwort sein, aber ich habe nicht genug Rep zu kommentieren, damit er es geht
@sbaang: Ein weiterer Grund, jedes Mal zu überprüfen, ist, dass es im Token interessante "Claims2" geben könnte, die einem Benutzer den Zugriff auf bestimmte Endpoints erlauben, nicht alle. Also verifizieren Sie bei jeder Verifizierung nicht nur, ob Der Benutzer darf auf die geschützte API zugreifen, jedoch nicht auf einen gültigen Token, sondern auf einen Token, der dies ausdrücklich zulässt.
Tags und Links javascript node.js express jwt express-jwt