Dokumentation
Lernen Sie JWT kennen und wie Sie es in Ihren Anwendungen nutzen.
Was ist JWT?
JSON Web Token (JWT) ist ein offener Standard (RFC 7519) für kompakte, sichere Datenübertragung zwischen Parteien als JSON-Objekt.
JWT-Struktur
Ein JWT besteht aus drei durch Punkte getrennten Teilen: Header.Payload.Signature.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cHeader
Enthält Metadaten zum Token, typischerweise Algorithmus (alg) und Typ (typ).
Payload
Enthält die Claims (Aussagen) über eine Entität und Metadaten.
Signatur
Stellt sicher, dass das Token nicht verändert wurde.
Häufige Claims
iss (Issuer): Identifiziert den Aussteller des Tokens
sub (Subject): Identifiziert das Subjekt des Tokens
aud (Audience): Identifiziert die Zielgruppe des Tokens
exp (Expiration): Ablaufzeit (Unix-Timestamp)
nbf (Not Before): Zeitpunkt, vor dem das Token nicht akzeptiert werden darf
iat (Issued At): Zeitpunkt der Ausstellung
Unterstützte Algorithmen
JWT unterstützt verschiedene Signaturalgorithmen.
HS256 / HS384 / HS512
HMAC mit SHA-2 — symmetrische Signatur
RS256 / RS384 / RS512
RSA mit SHA-2 — asymmetrische Signatur
ES256 / ES384 / ES512
ECDSA mit SHA-2 — asymmetrische Elliptische-Kurven-Signatur
EdDSA (Ed25519)
EdDSA — moderne Elliptische-Kurven-Signatur mit Ed25519
Code-Beispiele
Sofort einsatzbereite Code-Ausschnitte für JWT in verschiedenen Sprachen.
const jwt = require('jsonwebtoken');
// Sign
const token = jwt.sign(
{ sub: '1234567890', name: 'John Doe' },
'your-secret-key',
{ algorithm: 'HS256', expiresIn: '1h' }
);
// Verify
const decoded = jwt.verify(token, 'your-secret-key');
console.log(decoded);import { SignJWT, jwtVerify } from 'jose';
// Sign
const secret = new TextEncoder().encode('your-secret-key');
const token = await new SignJWT({ sub: '1234567890', name: 'John Doe' })
.setProtectedHeader({ alg: 'HS256' })
.setExpirationTime('1h')
.sign(secret);
// Verify
const { payload } = await jwtVerify(token, secret);
console.log(payload);import jwt
# Sign
token = jwt.encode(
{"sub": "1234567890", "name": "John Doe"},
"your-secret-key",
algorithm="HS256"
)
# Verify
decoded = jwt.decode(token, "your-secret-key", algorithms=["HS256"])
print(decoded)import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
// Sign
String token = Jwts.builder()
.setSubject("1234567890")
.claim("name", "John Doe")
.signWith(SignatureAlgorithm.HS256, "your-secret-key")
.compact();
// Verify
Claims claims = Jwts.parser()
.setSigningKey("your-secret-key")
.parseClaimsJws(token)
.getBody();import (
"github.com/golang-jwt/jwt/v5"
)
// Sign
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"sub": "1234567890",
"name": "John Doe",
})
tokenString, err := token.SignedString([]byte("your-secret-key"))
// Verify
parsed, err := jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {
return []byte("your-secret-key"), nil
})
claims := parsed.Claims.(jwt.MapClaims)require 'jwt'
payload = { sub: '1234567890', name: 'John Doe' }
# Sign
token = JWT.encode(payload, 'your-secret-key', 'HS256')
# Verify
decoded = JWT.decode(token, 'your-secret-key', true, algorithm: 'HS256')
puts decoded[0]use Firebase\JWT\JWT;
$payload = [
'sub' => '1234567890',
'name' => 'John Doe',
];
// Sign
$token = JWT::encode($payload, 'your-secret-key', 'HS256');
// Verify
$decoded = JWT::decode($token, new Key('your-secret-key', 'HS256'));
print_r($decoded);use jsonwebtoken::{encode, decode, Header, Algorithm, Validation, EncodingKey, DecodingKey};
// Sign
let token = encode(
&Header::new(Algorithm::HS256),
&serde_json::json!({"sub": "1234567890", "name": "John Doe"}),
&EncodingKey::from_secret("your-secret-key".as_ref()),
)?;
// Verify
let token_data = decode::<serde_json::Value>(
&token,
&DecodingKey::from_secret("your-secret-key".as_ref()),
&Validation::new(Algorithm::HS256),
)?;using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
using System.Text;
var securityKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes("your-secret-key"));
// Sign
var token = new JwtSecurityToken(
claims: new[] { new Claim("sub", "1234567890"), new Claim("name", "John Doe") },
signingCredentials: new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256)
);
var tokenString = new JwtSecurityTokenHandler().WriteToken(token);
// Verify
var principal = new JwtSecurityTokenHandler().ValidateToken(tokenString,
new TokenValidationParameters { ValidateIssuerSigningKey = true,
IssuerSigningKey = securityKey, ValidateIssuer = false, ValidateAudience = false },
out _);import JWT
// Sign
let payload = JWTPayload(sub: "1234567890", name: "John Doe")
let signer = JWTSigner.hs256(key: Data("your-secret-key".utf8))
let token = try signer.sign(payload)
// Verify
let verifier = JWTVerifier.hs256(key: Data("your-secret-key".utf8))
let verified = try verifier.verify(token)