Artikel

JWT ist nicht verschlüsselt, sondern nur Base64

Wer kann sehen, was im JWT-Token steckt, das bei jeder Anfrage deiner App mitgeschickt wird? Antwort: jeder. Hier erfährst du, was Tokens wirklich speichern, warum die Signaturprüfung reicht und welche 4 Dinge nie in den Payload gehören.

Furkan Özay15. September 2026 · 2 Min. Lesezeit
czCZAY.DEV // EDITORIALDE
SECURITY & AUTH

#API · 2 MIN LESEZEIT

FURKAN ÖZAYVOL. 2026 // #2AD8

Das ist das Token, das bei jeder Anfrage in deiner App mitgeschickt wird. Wer, glaubst du, kann lesen, was darin steht? Die Antwort ist einfach: jeder.

Drei Teile

Jedes JWT besteht aus drei Teilen, die durch Punkte getrennt sind: header.payload.signature. Die ersten beiden sind nicht verschlüsselt, sondern nur Base64-kodiert. Base64 ist keine Verschlüsselung, sondern nur ein Kodierungsformat – man kann es jederzeit dekodieren.

JavaScript
const [header, payload] = token.split(".");
console.log(JSON.parse(atob(payload)));
// { sub: "user_123", email: "...", role: "admin", exp: 1735689600 }

Wenn du das in deine Browser-Konsole einfügst, erscheinen direkt vor dir deine E-Mail-Adresse, deine User-ID, deine Rolle und das Ablaufdatum. Deshalb solltest du niemals Passwörter, Ausweisnummern oder Kartendaten in den Payload eines JWT packen.

Kann ich es einfach ändern und Admin werden?

Du könntest den Payload bearbeiten und role: "admin" hineinschreiben – Base64 lässt sich schließlich in beide Richtungen umwandeln. Aber der Server berechnet die Signatur mit einem geheimen Schlüssel neu, den nur er kennt. Die Signatur passt nicht zu deinem gefälschten Payload, und der Server lehnt das Token ab: 401. Du kannst den Payload lesen, aber nicht unbemerkt manipulieren.

Vier Regeln

Wichtig: Der Umgang mit JWTs

  1. Packe keine sensiblen Daten in den Payload – behandle ihn wie öffentliche Daten.
  2. Prüfe Berechtigungen (role, permissions) immer auf dem Server erneut; vertraue dem Token nicht blind.
  3. Halte die Gültigkeitsdauer kurz und nutze Refresh Tokens für lange Sessions.
  4. Lies das Signatur-Secret (secret) aus der .env und schreibe es nicht fest in den Code. Logge es außerdem nirgendwo.

Fazit

Die Aufgabe von JWT ist nicht Vertraulichkeit, sondern Integrität: Es garantiert, dass der Inhalt nicht manipuliert wurde, nicht dass er verborgen bleibt. Wenn du Daten hast, die wirklich geheim bleiben müssen, nutze JWE (verschlüsseltes JWT) oder klassische serverseitige Sessions.

Interaktive Roadmap & Tool

Als Nächstes lesen