JWT-Token in Java: Vollständiger Leitfaden zur Arbeit mit JSON Web Tokens
\n\nJSON 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\nWas ist JWT und warum wird es in Java benötigt?
\n\nJWT 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
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
Bibliothek JJWT (io.jsonwebtoken)
\n\nJJWT 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\nInstallation
\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\nJWT mit JJWT erstellen
\nimport 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\nJWT überprüfen und parsen
\nimport 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) Auch in der Bibliothek
SMS-Versand mit C++: API-Bibliothek LibCurl und REST-Anfragen
Symfony/Console für PHP: Komplette Anleitung mit Beispielen
Aufgabenwarteschlangen für JavaScript (Node.js): Bull, Bee-Queue, Kue
Arbeit mit YAML in Swift (iOS/macOS) — Bibliotheken Yams und YamlSwift
Maschinelles Lernen mit Go: Überblick über Bibliotheken und Frameworks (Golang)