JWT-Token-Struktur erklÀrt: Header, Payload und Signatur
JWT-Token-Struktur erklÀrt
Jedes JSON Web Token (JWT) ist eine kompakte, URL-sichere Zeichenkette, die Claims zwischen zwei Parteien ĂŒbertrĂ€gt. Das VerstĂ€ndnis seiner internen Struktur ist fĂŒr jeden Entwickler, der mit tokenbasierter Sicherheit arbeitet, unerlĂ€sslich.
Die drei Teile eines JWT
Ein JWT besteht aus drei durch Punkte (.) getrennten Teilen:
header.payload.signature
Beispiel:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Jeder Teil ist base64url-codiertes JSON. Ein JWT ist signiert, nicht verschlĂŒsselt â jeder kann es decodieren und seinen Inhalt lesen.
Teil 1: Der Header
Der Header enthĂ€lt Metadaten ĂŒber das Token â den Signaturalgorithmus und den Tokentyp.
| Feld | Beschreibung | Beispielwerte |
|-------|-------------|----------------|
| alg | Signaturalgorithmus (erforderlich) | HS256, RS256, ES256 |
| typ | Tokentyp (optional) | JWT |
| kid | SchlĂŒssel-ID (optional) | "key-1" |
{
"alg": "HS256",
"typ": "JWT"
}
Das Feld alg teilt dem Verifizierer mit, welcher Algorithmus die Signatur erstellt hat. Eine Algorithmus-Diskrepanz â oder die Akzeptanz von alg: "none" â ist eine hĂ€ufige JWT-Sicherheitsschwachstelle.
Teil 2: Die Payload
Die Payload enthĂ€lt Claims ĂŒber den Benutzer und Metadaten. Claims fallen in drei Kategorien:
Registrierte Claims
| Claim | VollstÀndiger Name | Zweck |
|-------|-----------|---------|
| iss | Issuer | Wer das Token ausgestellt hat |
| sub | Subject | Identifiziert den Benutzer |
| aud | Audience | Beabsichtigter EmpfÀnger |
| exp | Expiration | Zeitstempel des Token-Ablaufs |
| nbf | Not Before | Token ist vor diesem Zeitpunkt nicht gĂŒltig |
| iat | Issued At | Zeitstempel der Token-Erstellung |
| jti | JWT ID | Eindeutige Token-Kennung |
Beispiel einer decodierten Payload
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022,
"exp": 1516242622,
"iss": "https://auth.example.com"
}
Ăffentliche Claims sind in der IANA-Registry definiert oder verwenden kollisionsresistente URIs. Private Claims sind benutzerdefinierte Claims, die zwischen Aussteller und EmpfĂ€nger vereinbart werden.
Teil 3: Die Signatur
Die Signatur wird erstellt, indem der codierte Header, die codierte Payload und ein geheimer SchlĂŒssel mit dem Algorithmus aus dem Header kombiniert werden. Sie dient zwei Zwecken:
- IntegritĂ€t â bestĂ€tigt, dass das Token nach der Signierung nicht verĂ€ndert wurde.
- Authentifizierung â beweist, dass das Token von der erwarteten Partei signiert wurde.
Erstellung einer HS256-Signatur
HMACSHA256(
base64urlEncode(header) + "." + base64urlEncode(payload),
secret
)
Erstellung einer RS256-Signatur
RSASHA256(
base64urlEncode(header) + "." + base64urlEncode(payload),
privateKey
)
Base64url im Vergleich zu Standard-Base64
| Aspekt | Standard-Base64 | Base64url |
|--------|-----------------|-----------|
| Zeichen 62 | + | - |
| Zeichen 63 | / | _ |
| Padding | = | Weggelassen |
Diese Codierung stellt sicher, dass JWTs ohne Prozentcodierung sicher fĂŒr HTTP-Header, Abfrageparameter und URL-Pfade sind.
VollstÀndiger JWT-Erstellungsprozess
- Header-JSON erstellen und base64url-codieren.
- Payload-JSON erstellen und base64url-codieren.
- Mit einem
.-Trennzeichen verketten. - Mit dem gewĂ€hlten Algorithmus und dem geheimen SchlĂŒssel signieren.
- Die Signatur base64url-codieren.
- Alle drei Teile mit
.-Trennzeichen verketten.
SicherheitsĂŒberlegungen
- Speichern Sie niemals Geheimnisse in der Payload. Die Payload ist codiert, nicht verschlĂŒsselt.
- Validieren Sie immer die Signatur. Ohne Verifizierung kann jeder Tokens fÀlschen.
- PrĂŒfen Sie den
alg-Header. Lehnen Siealg: "none"und Versuche der Algorithmus-Herabstufung ab. - Legen Sie kurze Ablaufzeiten fest. Verwenden Sie
exp-Claims in Minuten oder Stunden, nicht in Monaten.
Decodieren Sie ein JWT-Token online
Nutzen Sie das JWT-Decoder-Tool, um jedes Token zu untersuchen. FĂŒgen Sie es ein und sehen Sie sofort den decodierten Header, die Payload und den Signaturalgorithmus. Die gesamte Verarbeitung erfolgt in Ihrem Browser.