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: Vollständiger Leitfaden zur Arbeit mit JSON Web Tokens

\n\n

JSON Web Token (JWT) ist ein offener Standard (RFC 7519), der eine kompakte und eigenständige Möglichkeit zur Übertragung von Informationen zwischen Parteien als JSON-Objekt definiert. In Java gibt es mehrere ausgereifte Bibliotheken für die Arbeit mit JWT, mit denen Token erstellt, signiert, überprüft und dekodiert werden können. In diesem Artikel betrachten wir drei Hauptbibliotheken im Detail: JJWT, Auth0 java-jwt und Nimbus JOSE + JWT, und analysieren die Best Practices für deren Verwendung.

\n\n

Was ist JWT und warum wird es in Java benötigt?

\n\n

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

\n
    \n
  • Header – enthält Informationen über den Tokentyp und den Signaturalgorithmus (z. B. HS256 oder RS256).
  • \n
  • Payload – enthält die Claims: Standard (iss, sub, exp, iat) und benutzerdefinierte Daten.
  • \n
  • Signature – wird durch Hashing von Header + Payload mit einem geheimen Schlüssel oder einem RSA/ECDSA-Schlüsselpaar erstellt.
  • \n
\n\n

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

\n
    \n
  • Authentifizierung und Autorisierung in REST-APIs (insbesondere in Verbindung mit Spring Security).
  • \n
  • Übertragung von Informationen zwischen Microservices.
  • \n
  • Implementierung von Single Sign-On (SSO).
  • \n
\n\n

Bibliothek JJWT (io.jsonwebtoken)

\n\n

JJWT ist eine der beliebtesten und am besten dokumentierten Bibliotheken für Java. Sie unterstützt alle modernen Signatur- und Verschlüsselungsalgorithmen und bietet eine praktische Fluent-API.

\n\n

Installation

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

JWT mit JJWT erstellen

\n
import io.jsonwebtoken.Jwts;\nimport io.jsonwebtoken.SignatureAlgorithm;\nimport io.jsonwebtoken.security.Keys;\nimport javax.crypto.SecretKey;\nimport java.util.Date;\n\npublic class JwtExample {\n    public static void main(String[] args) {\n        // Generierung eines sicheren Schlüssels für HS256\n        SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256);\n\n        String jwt = Jwts.builder()\n                .subject("user123")\n                .issuer("https://pythonlib.ru")\n                .issuedAt(new Date())\n                .expiration(new Date(System.currentTimeMillis() + 3600000)) // 1 Stunde\n                .claim("role", "ADMIN")\n                .signWith(key)\n                .compact();\n\n        System.out.println("JWT: " + jwt);\n    }\n}
\n\n

JWT überprüfen und parsen

\n
import io.jsonwebtoken.Claims;\nimport io.jsonwebtoken.Jws;\nimport io.jsonwebtoken.Jwts;\n\npublic class JwtParser {\n    public static void main(String[] args) {\n        String jwt = "eyJhbGciOiJIUzI1NiJ9..."; // Ihr Token\n        SecretKey key = ...; // derselbe Schlüssel, der zum Signieren verwendet wurde\n\n        try {\n            Jws<Claims> claimsJws = Jwts.parser()\n                    .verifyWith(key)\n                    .build()\n                    .parseSignedClaims(jwt);\n            \n            Claims claims = claimsJws.getPayload();\n            String subject = claims.getSubject();\n            String role = claims.get("role", String.class);\n            \n            System.out.println("Subject: " + subject);\n            System.out.println("Role: " + role);\n        } catch (Exception e)                    

Empfehlungen