2017-03-27 2 views
0

Ich denke über die Migration eines PHP-basierten Benutzerportals zur JWT-Stateless-API nach und ich bin mir nicht sicher, ob ich dieses Recht verstehe.Benutzerdaten mit JWT

Was sollte das Zugriffstoken speichern? Die Benutzerdatenbank verfügt über einen Autoinkrement-Primärschlüssel für die Benutzer-ID, den Benutzernamen und die E-Mail-Adresse. Alle relationalen Tabellen in der DB werden durch die Benutzer-ID referenziert. Ich weiß nicht, ob es eine gute Übung ist, die Benutzer-ID im öffentlichen Token zu übergeben. Ich denke, vielleicht übergeben Sie die E-Mail-Adresse, aber das bedeutet, dass ich den Benutzer-Datensatz jede Seite laden musste, so dass ich auf die anderen Tabellen über die Benutzer-ID zugreifen kann.

Wie übertrage ich auch Benutzerdetails auf die nächste Seite? Früher würde ich diese Felder bei der Anmeldung in $ _SESSION speichern, aber das ist jetzt nicht möglich. Bedeutet das, dass ich den Benutzerdatensatz jedes Mal manuell ziehen muss?

Schließlich, wie mache ich Tokens beim Abmelden ungültig?

Danke!

+0

Sie machen sie nicht ungültig, Sie entfernen sie einfach aus dem Browser. – zerkms

+1

Einige verwandte lesen, die Sie vielleicht in Erwägung ziehen sollten: http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/, http://cryto.net/~joepie91/blog/2016/06/19/stop-using-jwt-for-sessions-teil-2-why-your-solution-doesnt-work /, https://paragonie.com/blog/2017/03/jwt- json-web-tokens-is-bad-standard-dass-jeder-sollte vermeiden –

Antwort

0

Sie müssen nicht alles auf Log Out.Just tun Token entfernen Browser des Benutzers d.h function logout(){ localStorage.removeItem(key); }

0

Es gibt keinen Grund, warum Sie befürchten, sollten Sie Ihre Benutzer-ID in Ihrem JWT aussetzt. Alles JWT ist, dass es eine Nutzlast (sagen Sie die E-Mail Ihres Benutzers, Name, Benutzer-ID und etc.), eine Kopfzeile (die Art der verwendeten Verschlüsselung) und eine Signatur (Ihre codierte Kopfzeile, Payload und ein Geheimnis). Was Sie einfach tun, ist, dass, wann immer Sie überprüfen möchten, ob der JWT gültig ist, Sie es einfach mit dem privaten Schlüssel überprüfen, den Sie irgendwo sicher auf dem Server gespeichert haben.

Dies bedeutet, dass die JWT-Nutzlast die Anzahl der Datenbankverbindungen und Abfragen reduzieren kann, da Sie die DB nicht ständig mit der Datenbank überprüfen müssen. Sie müssen lediglich den JWT beim Laden der Seite für jede Transaktion usw. mit einem intern gespeicherten privaten Schlüssel überprüfen.

Benutzerdaten können einfach aus der Payload (die nur Base64-codiert, überhaupt nicht verschlüsselt) abgerufen werden, so dass Sie entweder $_COOKIE[] in PHP verwenden können (die als Teil der HTTP-Anfrage übertragen wird) oder JS verwenden entschlüsseln Sie die Payload auf der Client-Seite.

JWT kann durch einfaches Löschen aus den Benutzer-Cookies oder dem lokalen Speicher ungültig gemacht werden. Es gibt viele Möglichkeiten, es ungültig zu machen, wie:

  • , wenn Sie erkennen, ist es vorbei sein Verfallsdatum
  • gelebt hat, wenn Sie erkennen es mit so manipuliert wurde, dass die Signaturprüfung auf Ihrem privaten Schlüssel basiert fehlgeschlagen
+0

JWT reduziert nur die Anzahl der Datenbankverbindungen für die Validierung des Benutzers. Die Benutzerdetails müssen trotzdem noch aus der DB für die Anfrage gezogen werden. Ich mache mir nur Sorgen, dass der JWT-Token "gestohlen" wird und die Informationen in der Payload leicht entschlüsselt werden können. Speichert das Speichern der Details in $ _COOKIE den Zweck des Umzugs zum zustandslosen JWT nicht? – Joshua