JWT Encoder

Erstellen und signieren Sie JSON Web Tokens mit HS256, HS384, HS512

Header

Läuft lokal · Sicher zum Einfügen von Secrets

Payload

Läuft lokal · Sicher zum Einfügen von Secrets

Geheimschlüssel

Läuft lokal · Sicher zum Einfügen von Secrets

Kodiertes JWT

Output will appear here…

Ihr Geheimschlüssel verlässt Ihren Browser nicht. Das Signieren erfolgt clientseitig.

Auch ausprobieren:JWT Decoder

Was ist JWT-Kodierung?

JWT-Kodierung ist der Prozess der Erstellung eines JSON Web Token — eine kompakte, URL-sichere Zeichenkette, die eine Reihe von Claims trägt, die mit einem kryptografischen Schlüssel signiert sind. Das Ergebnis ist ein dreiteiliges Token (Header.Payload.Signatur), das in RFC 7519 definiert ist und von Servern ohne Sitzungsverwaltung verifiziert werden kann. JWT-Online-Kodierung ermöglicht es Ihnen, Token direkt in Ihrem Browser zu erstellen und zu signieren, um Tests und Entwicklung durchzuführen.

Der Header deklariert den Signaturalgorithmus (z.B. HS256) und den Token-Typ. Die Payload enthält Claims — Schlüssel-Wert-Paare wie das Subjekt (sub), Ablaufzeit (exp) und alle benutzerdefinierten Daten, die Ihre Anwendung benötigt. Beide Teile werden als JSON serialisiert und dann base64url-kodiert. Die Signatur wird über den kodierten Header und die Payload mit einem geheimen Schlüssel berechnet, wodurch alle drei Segmente verbunden werden.

Im Gegensatz zu Session-Cookies sind JWTs selbstständig: Der Prüfer muss nicht auf eine Datenbank zugreifen oder einen externen Dienst aufrufen. Dies macht JWT-basierte Authentifizierung in REST-APIs, Microservices und Single-Page-Anwendungen beliebt, wo zustandslose Autorisierung die Latenz reduziert und die horizontale Skalierung vereinfacht.

Warum einen JWT Encoder verwenden?

Die manuelle JWT-Generierung erfordert base64url-Kodierung, JSON-Serialisierung und HMAC-Berechnung. Dieses Tool führt alle drei Schritte sofort durch, damit Sie sich auf die richtigen Claims konzentrieren können.

Sofortige Token-Generierung
Bearbeiten Sie Header, Payload und Schlüssel — das signierte JWT wird in Echtzeit aktualisiert. Kein Build-Schritt, keine Bibliotheksinstallation, kein Boilerplate-Code.
🔒
Mehrere HMAC-Algorithmen
Wechseln Sie mit einem Klick zwischen HS256, HS384 und HS512. Der Header wird automatisch aktualisiert und die Signatur wird sofort neu berechnet.
🛡️
Datenschutz an erster Stelle
Das gesamte Signieren erfolgt in Ihrem Browser mit der Web Crypto API. Ihr geheimer Schlüssel und Payload-Daten verlassen niemals Ihre Maschine — kein Server, keine Logs, kein Risiko.
📋
Ein-Klick-Claim-Helfer
Fügen Sie Timestamps iat, exp+1h oder exp+24h mit einem Button hinzu. Kein manuelles Berechnen von Unix-Timestamps oder Nachschlagen der aktuellen Epoch-Zeit.

JWT Encoder Anwendungsfälle

Frontend-Authentifizierungstests
Generieren Sie Tokens mit spezifischen Claims und Ablaufzeiten, um Login-Flows, Token-Refresh-Logik und Protected Routes zu testen, ohne einen Backend-Auth-Server auszuführen.
Backend-API-Entwicklung
Erstellen Sie Test-Tokens mit benutzerdefinierten sub-, aud- und scope-Claims, um Autorisierungs-Middleware, rollenbasierte Zugriffskontrolle und Berechtigungsprüfungen während der lokalen Entwicklung zu testen.
DevOps & CI/CD-Pipelines
Generieren Sie kurzfristige Service-Tokens für Deployment-Skripte, Integrationstests oder Service-Kommunikation, wo ein vollständiger OAuth-Flow unnötige Komplexität hinzufügen würde.
QA & manuelle Tests
Erstellen Sie Tokens mit Edge-Case-Claims — abgelaufene Tokens, fehlende Felder, falsche Zielgruppen — um zu überprüfen, dass Ihre API die richtigen HTTP 401- oder 403-Antworten zurückgibt.
Sicherheitsprüfung
Erstellen Sie Tokens, die mit verschiedenen Algorithmen und Schlüssellängen signiert sind, um zu validieren, dass Ihre Verifizierungslogik schwache oder nicht übereinstimmende Signaturen korrekt ablehnt.
Lernen & Prototyping
Studenten und JWT-Anfänger können mit Header-Feldern, Claim-Strukturen und Signaturalgorithmen experimentieren, um zu verstehen, wie jeder Teil des Tokens funktioniert.

HS256 vs HS384 vs HS512: HMAC-Algorithmen Vergleich

Alle drei Algorithmen verwenden HMAC (Hash-based Message Authentication Code) mit einem gemeinsamen Geheimnis. Der Unterschied liegt in der zugrunde liegenden Hash-Funktion, die die Signaturgröße und den Sicherheitsrand beeinflusst. Für die meisten Anwendungen bietet HS256 ausreichende Sicherheit. Wählen Sie HS384 oder HS512, wenn Compliance-Anforderungen (z.B. FIPS-140) einen stärkeren Hash erfordern oder wenn Ihre Tokens hochwertige Autorisierungsentscheidungen tragen.

AlgorithmusHashSignaturGeschwindigkeitTypische Verwendung
HS256SHA-25632 BFastestGeneral purpose, default for most libraries
HS384SHA-38448 BFastHigher security margin, FIPS-140 compliant
HS512SHA-51264 BFastMaximum HMAC security, large payloads

Standard JWT Claims Referenz

RFC 7519 definiert sieben registrierte Claims. Keine sind erforderlich, aber die korrekte Verwendung verbessert Interoperabilität und Sicherheit. Der exp-Claim ist besonders wichtig — Tokens ohne Ablaufzeit sind auf unbegrenzte Zeit gültig, wenn das Geheimnis nicht rotiert wird.

ClaimNameBeschreibungBeispiel
issIssuerWho issued the token"auth.example.com"
subSubjectWho the token represents"user-123"
audAudienceIntended recipient service"api.example.com"
expExpirationUnix timestamp — token invalid after this time1717203600
nbfNot BeforeUnix timestamp — token invalid before this time1717200000
iatIssued AtUnix timestamp when the token was created1717200000
jtiJWT IDUnique token identifier for revocation tracking"a1b2c3d4"

JWT-Kodierung in Code

Diese Beispiele zeigen, wie man JWTs programmatisch erstellt und signiert. Jedes Snippet produziert einen gültigen HS256-signierten Token. Für Produktionssysteme setzen Sie immer den exp-Claim und verwenden ein kryptografisch zufälliges Geheimnis von mindestens 256 Bits.

JavaScript (Web Crypto API)
async function signJWT(payload, secret, alg = 'HS256') {
  const header = { alg, typ: 'JWT' }
  const enc = new TextEncoder()

  // Base64url encode header and payload
  const b64url = (obj) =>
    btoa(JSON.stringify(obj)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

  const h = b64url(header)
  const p = b64url(payload)

  // Sign with HMAC-SHA256
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(`${h}.${p}`))
  const s = btoa(String.fromCharCode(...new Uint8Array(sig)))
    .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

  return `${h}.${p}.${s}`
}

// Usage
const token = await signJWT(
  { sub: 'user-123', name: 'Alice', iat: Math.floor(Date.now() / 1000) },
  'your-256-bit-secret'
)
// → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."
Python (PyJWT)
import jwt
import time

payload = {
    "sub": "user-123",
    "name": "Alice",
    "iat": int(time.time()),
    "exp": int(time.time()) + 3600,  # expires in 1 hour
}

# Sign with HS256 (default)
token = jwt.encode(payload, "your-256-bit-secret", algorithm="HS256")
# → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."

# Verify and decode
decoded = jwt.decode(token, "your-256-bit-secret", algorithms=["HS256"])
# → {"sub": "user-123", "name": "Alice", "iat": 1717200000, "exp": 1717203600}
Node.js (jsonwebtoken)
const jwt = require('jsonwebtoken')

const payload = {
  sub: 'user-123',
  name: 'Alice',
  role: 'admin',
}

// Sign — iat is added automatically
const token = jwt.sign(payload, 'your-256-bit-secret', {
  algorithm: 'HS256',
  expiresIn: '1h',    // sets exp claim
  issuer: 'auth.example.com',  // sets iss claim
})

// Verify
const decoded = jwt.verify(token, 'your-256-bit-secret')
// → { sub: 'user-123', name: 'Alice', role: 'admin', iat: ..., exp: ... }
Go (golang-jwt)
package main

import (
    "fmt"
    "time"
    "github.com/golang-jwt/jwt/v5"
)

func main() {
    claims := jwt.MapClaims{
        "sub":  "user-123",
        "name": "Alice",
        "iat":  time.Now().Unix(),
        "exp":  time.Now().Add(time.Hour).Unix(),
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    signed, _ := token.SignedString([]byte("your-256-bit-secret"))
    fmt.Println(signed)
    // → eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOi...
}

Häufig gestellte Fragen

Was ist der Unterschied zwischen JWT-Kodierung und JWT-Dekodierung?
JWT-Kodierung erstellt ein signiertes Token aus Header, Payload und Geheimnis. JWT-Dekodierung kehrt den Prozess um — es liest den base64url-kodierten Header und Payload zurück in JSON. Dekodierung erfordert das Geheimnis nicht; Kodierung tut es immer, weil die Signatur berechnet werden muss.
Wie lang sollte mein JWT-Geheimnis sein?
Für HS256 verwenden Sie ein Geheimnis von mindestens 256 Bit (32 Bytes). Für HS384 mindestens 384 Bit (48 Bytes). Für HS512 mindestens 512 Bit (64 Bytes). Kürzere Geheimnisse werden von den meisten Bibliotheken technisch akzeptiert, reduzieren aber die effektive Sicherheit der HMAC-Signatur. Generieren Sie Geheimnisse mit einem kryptografisch sicheren Zufallsgenerator, nicht einer menschlich gewählten Passphrase.
Ist es sicher, dieses Tool mit echten Geheimnissen zu verwenden?
Dieses Tool verarbeitet alles in Ihrem Browser mit der Web Crypto API — keine Daten werden an einen Server gesendet. Vermeiden Sie trotzdem das Einfügen von Produktionsgeheimnissen in Web-Tools als allgemeine Sicherheitspraxis. Verwenden Sie für die Produktions-Keyverwaltung Umgebungsvariablen oder einen Secrets Manager wie HashiCorp Vault oder AWS Secrets Manager.
Sollte ich HS256 oder RS256 für meine Anwendung verwenden?
Verwenden Sie HS256, wenn der gleiche Service Tokens erstellt und verifiziert — es ist schneller und einfacher. Verwenden Sie RS256 (asymmetrisch), wenn Drittservices Ihre Tokens verifizieren müssen, ohne sie erstellen zu können. RS256 ist häufig in OAuth 2.0-Providern, OpenID Connect und Multi-Tenant-SaaS-Architekturen.
Warum läuft mein JWT unmittelbar nach der Erstellung ab?
Der exp-Claim verwendet Unix-Timestamps in Sekunden, nicht Millisekunden. Wenn Sie exp auf Date.now() (gibt Millisekunden zurück) setzen, läuft das Token Tausende von Jahren in der Zukunft ab — oder wenn Sie versehentlich einen Millisekunden-Wert verwenden, wo Sekunden erwartet werden, können Bibliotheken es als bereits abgelaufen interpretieren. Verwenden Sie immer Math.floor(Date.now() / 1000) in JavaScript oder int(time.time()) in Python.
Kann ich sensible Daten in die JWT-Payload einfügen?
Sie können, sollten aber nicht. Die JWT-Payload ist base64url-kodiert, nicht verschlüsselt — jeder mit dem Token kann die Claims lesen. Speichern Sie keine Passwörter, Kreditkartennummern oder persönliche Daten in der Payload. Wenn Sie sensible Informationen einschließen müssen, verwenden Sie JWE (JSON Web Encryption) wie in RFC 7516 definiert, die die gesamte Payload verschlüsselt.
Was passiert, wenn ich die Payload nach dem Signieren ändere?
Die Signatur wird ungültig. Die HMAC-Signatur wird über die exakten Bytes des kodierten Headers und der Payload berechnet. Jede Änderung — selbst ein Leerzeichen oder eine Zeichenänderung — erzeugt eine völlig andere Signatur. Ein richtig implementierter Prüfer lehnt das Token mit einem Signatur-Fehler ab.