614 Stimmen

Wenn Sie JWT entschlüsseln können, wie sicher sind sie dann?

Wenn ich ein JWT bekomme und ich das Nutzdaten entschlüsseln kann, wie ist das dann sicher? Könnte ich nicht einfach das Token aus dem Header herausgreifen, entschlüsseln, die Benutzerinformationen im Nutzdaten ändern und es dann mit dem gleichen korrekt verschlüsselten Geheimnis zurücksenden?

Ich weiß, sie müssen sicher sein, aber ich würde wirklich gerne die Technologien verstehen. Was fehlt mir?

18voto

Batman Rises Punkte 642

Es ist wichtig zu beachten, dass JWT für Autorisierung und nicht für Authentifizierung verwendet werden. Daher wird ein JWT für Sie erst erstellt, nachdem Sie vom Server authentifiziert wurden, indem Sie möglicherweise die Anmeldeinformationen angeben. Sobald ein JWT für zukünftige Interaktionen mit dem Server erstellt wurde, kann das JWT verwendet werden. Das JWT teilt dem Server also mit, dass dieser Benutzer authentifiziert wurde. Lassen Sie ihn auf die bestimmte Ressource zugreifen, wenn er die Rolle hat.
Informationen im Payload des JWT sind für jeden sichtbar. Es kann einen "Man-in-the-Middle"-Angriff geben und der Inhalt des JWT kann geändert werden. Daher sollten keine sensiblen Informationen wie Passwörter im Payload übertragen werden. Wir können die Payload-Daten verschlüsseln, wenn wir sie sicherer machen möchten. Wenn der Payload manipuliert wird, erkennt der Server dies.
Angenommen, ein Benutzer wurde authentifiziert und mit einem JWT versehen. Das generierte JWT enthält einen Anspruch, der die Rolle des Admin angibt. Auch die Signatur wird erstellt mit

enter image description here

Dieses JWT wird jetzt manipuliert und nehmen wir an, die Rolle wird zu Super Admin geändert
Dann, wenn der Server dieses Token erhält, wird er erneut die Signatur mit dem geheimen Schlüssel generieren (den nur der Server hat) und dem Payload. Es wird nicht mit der Signatur übereinstimmen im JWT. Also der Server wird wissen, dass das JWT manipuliert wurde.

Reposted aus meinem Blog-Beitrag - JWT Struktur und Sicherheit

3voto

sdfdsf sdf Punkte 433

Nur der private Schlüssel des JWT, der auf Ihrem Server liegt, wird das verschlüsselte JWT entschlüsseln können. Nur diejenigen, die den privaten Schlüssel kennen, werden in der Lage sein, das verschlüsselte JWT zu entschlüsseln.

Verstecken Sie den privaten Schlüssel an einem sicheren Ort auf Ihrem Server und verraten Sie niemals jemandem den privaten Schlüssel.

2voto

yurin Punkte 4050

Ich bin kein Kryptographiespezialist und hoffe daher, dass meine Antwort auch jemandem helfen kann, der keiner ist.

Es gibt zwei mögliche Arten, Kryptographie in der Programmierung zu nutzen:

  1. Signieren / Überprüfen
  2. Verschlüsselung / Entschlüsselung

Wir verwenden das Signieren, wenn wir sicherstellen wollen, dass die Daten von einer vertrauenswürdigen Quelle stammen. Verschlüsselung wird verwendet, um die Daten zu schützen.

Das Signieren / Überprüfen verwendet asymmetrische Algorithmen, d.h. wir signieren mit einem Schlüssel (privat) und der Datenempfänger verwendet den anderen (öffentlichen) Schlüssel zur Überprüfung.

Ein symmetrischer Algorithmus verwendet denselben Schlüssel zum Verschlüsseln und Entschlüsseln von Daten.

Die Verschlüsselung kann sowohl mit symmetrischen als auch mit asymmetrischen Algorithmen durchgeführt werden. vergleichsweise einfacher Artikel zum Thema

Das oben Genannte ist allgemein bekannt, hier nun meine Meinung.

Wenn JWT zur einfachen Identifizierung von Client zu Server verwendet wird, ist keine Signierung oder asymmetrische Verschlüsselung erforderlich. JWT kann mit AES verschlüsselt werden, was schnell und überaus sicher ist. Wenn der Server es entschlüsseln kann, bedeutet das, dass der Server derjenige ist, der es verschlüsselt hat.

Zusammenfassung: Nicht verschlüsselte JWT sind nicht sicher. Symmetrische Verschlüsselung kann anstelle von Signierung verwendet werden, wenn keine dritte Partei beteiligt ist.

0voto

Robert Punkte 1178

Kennwörter

JsonWebtoken

Gültigkeit

Bis das Passwort geändert wird oder eine Änderung erzwungen wird z.B. nach 90 Tagen.

Nur eine kurze Zeit, normalerweise 1-24 Stunden. Dann muss der JWT erneuert werden

Zurücksetzen

Passwörter müssen manuell vom Benutzer zurückgesetzt werden

Wenn der "Client", z.B. Ihr Mobiltelefon, einen JWT hat, kann dies automatisch erneuert werden. Der Benutzer sieht das nicht.

Sicherheit

Wenn ein JWT erneuert wird, ist das Backend involviert. Der JWT könnte jederzeit widerrufen werden.

Mehr Sicherheit

Der "Client", z.B. seine IP-Adresse oder eine Mobilgeräte-ID (die schwer zu fälschen ist), kann in den JWT codiert werden. Jede Manipulation kann leicht im Backend erkannt werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X