JWT-Token in Java: Vollständiger Leitfaden zur Arbeit mit JSON Web Tokens

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

JWT-Token in Java: Erstellung, Validierung und Verwendung



JSON Web Token (JWT) ist eine kompakte und eigenständige Methode zur Übertragung von Informationen zwischen Parteien in Form eines JSON-Objekts. In Java wird JWT häufig für Authentifizierung, Autorisierung und Datenaustausch in REST-APIs und Microservices-Architekturen verwendet. In diesem Artikel behandeln wir die beiden beliebtesten Bibliotheken für die Arbeit mit JWT in Java – JJWT (Java JWT) von Stormpath und java-jwt von Auth0 – und betrachten die Integration mit Spring Security.



Was ist JWT und wozu wird es benötigt?



Ein JWT besteht aus drei Teilen, die durch Punkte getrennt sind:

  • Header – enthält den Tokentyp und den Signaturalgorithmus (z. B. HS256 oder RS256).
  • Payload – die Nutzlast mit Claims wie Benutzer-ID, Rollen, Ablaufdatum.
  • Signature – die Signatur, die aus Header, Payload und einem geheimen Schlüssel erstellt wird.


In Java wird JWT am häufigsten verwendet für:

  • Authentifizierung von Benutzern ohne Serversitzungen (stateless).
  • Übertragung von Zugriffsrechten zwischen Microservices.
  • Einmal-Token zum Zurücksetzen von Passwörtern oder zur E-Mail-Bestätigung.


Bibliothek JJWT (io.jsonwebtoken)



JJWT ist die beliebteste Bibliothek für die Arbeit mit JWT in Java. Sie ist einfach zu verwenden, unterstützt alle Standardalgorithmen (HS256, RS256, ES256) und wird aktiv aktualisiert.



JJWT über Maven einbinden

<dependency>    <groupId>io.jsonwebtoken</groupId>    <artifactId>jjwt-api</artifactId>    <version>0.12.6</version></dependency><dependency>    <groupId>io.jsonwebtoken</groupId>    <artifactId>jjwt-impl</artifactId>    <version>0.12.6</version>    <scope>runtime</scope></dependency><dependency>    <groupId>io.jsonwebtoken</groupId>    <artifactId>jjwt-jackson</artifactId>    <version>0.12.6</version>    <scope>runtime</scope></dependency>


JWT-Token erstellen

import io.jsonwebtoken.Jwts;import io.jsonwebtoken.SignatureAlgorithm;import io.jsonwebtoken.security.Keys;import javax.crypto.SecretKey;import java.util.Date;

public class JwtExample { public static void main(String[] args) { // Generierung eines sicheren geheimen Schlüssels für HS256 SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256);

String token = Jwts.builder() .subject("user123") .claim("role", "admin") .issuedAt(new Date()) .expiration(new Date(System.currentTimeMillis() + 3600000)) // 1 Stunde .signWith(key) .compact();

System.out.println("Erstellter JWT: " + token); }}


JWT validieren und parsen

import io.jsonwebtoken.Claims;import io.jsonwebtoken.Jws;import io.jsonwebtoken.JwtException;import io.jsonwebtoken.Jwts;

public class JwtParserExample { public static void main(String[] args) { String jwtToken = "eyJhbGciOiJIUzI1NiJ9..."; // Ihr Token SecretKey key = ...; // derselbe Schlüssel wie bei der Erstellung

try { Jws<Claims> claimsJws = Jwts.parser() .verifyWith(key) .build() .parseSignedClaims(jwtToken);

Claims claims = claimsJws.getPayload(); System.out.println("Subject: " + claims.getSubject()); System.out.println("Role: " + claims.get("role")); System.out.println("Expiration: " + claims.getExpiration()); } catch (JwtException e) { System.out.println("Token ungültig: " + e.getMessage()); }

Empfehlungen