JWT-Tokens in Kotlin: Vollständiger Leitfaden mit Codebeispielen

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-Tokens in Kotlin: Vollständiger Leitfaden für Entwickler



JSON Web Token (JWT) ist ein kompaktes, URL-sicheres Format zur Übertragung von Ansprüchen (Claims) zwischen zwei Parteien. Im Kotlin-Ökosystem wird JWT häufig für Authentifizierung, Autorisierung und Datenaustausch in Mikrodiensten, mobilen Anwendungen und Webanwendungen mit Ktor oder Spring Boot verwendet. In diesem Artikel werden wir uns ansehen, wie man JWT-Tokens in Kotlin mit den beliebten Bibliotheken JJWT (Java JWT) und Auth0 java-jwt erstellt, signiert und überprüft.



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

JWT besteht aus drei Teilen: Header, Payload und Signatur. In Kotlin ermöglichen JWT-Tokens:

  • Implementierung einer zustandslosen Authentifizierung (der Server speichert keine Sitzungen).
  • Übertragung von Rollen und Zugriffsrechten (Claims).
  • Arbeit mit verteilten Systemen und APIs.
  • Integration mit OAuth2 und OpenID Connect.


Installation von Bibliotheken für die Arbeit mit JWT in Kotlin

Für Kotlin/JVM-Projekte eignen sich am besten zwei Bibliotheken: io.jsonwebtoken:jjwt (JJWT) und com.auth0:java-jwt. Fügen Sie die Abhängigkeiten in build.gradle.kts hinzu:



// build.gradle.ktsdependencies {    // JJWT (empfohlen)    implementation("io.jsonwebtoken:jjwt-api:0.12.6")    runtimeOnly("io.jsonwebtoken:jjwt-impl:0.12.6")    runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.12.6") // für JSON

// Auth0 java-jwt implementation("com.auth0:java-jwt:4.4.0")}


Erstellung eines JWT-Tokens mit JJWT (Kotlin)

JJWT bietet eine saubere fluent API. Nachfolgend ein Beispiel zur Erstellung eines Tokens mit HMAC-SHA256-Signatur:



import io.jsonwebtoken.Jwtsimport io.jsonwebtoken.SignatureAlgorithmimport io.jsonwebtoken.security.Keysimport java.util.Date

fun createJwtToken(userId: String, role: String): String { val secretKey = Keys.hmacShaKeyFor("my_secret_key_32_bytes_long!!".toByteArray())

val token = Jwts.builder() .setSubject(userId) .claim("role", role) .setIssuedAt(Date()) .setExpiration(Date(System.currentTimeMillis() + 3600_000)) // 1 Stunde .signWith(secretKey, SignatureAlgorithm.HS256) .compact()

return token}


Überprüfung und Parsen eines JWT-Tokens

Zur Validierung des Tokens verwenden Sie Jwts.parserBuilder(). Beispiel einer Überprüfung mit Extraktion der Claims:



import io.jsonwebtoken.Jwtsimport io.jsonwebtoken.security.Keys

fun validateToken(token: String): Map<String, Any>? { return try { val secretKey = Keys.hmacShaKeyFor("my_secret_key_32_bytes_long!!".toByteArray()) val claims = Jwts.parserBuilder() .setSigningKey(secretKey) .build() .parseClaimsJws(token) .body

claims } catch (e: Exception) { println("Ungültiges Token: ${e.message}") null }}


Arbeit mit JWT über Auth0 java-jwt (Kotlin)

Die Auth0-Bibliothek ist ebenfalls beliebt. Beispiel zur Erstellung und Überprüfung eines Tokens mit RSA-Signatur:



import com.auth0.jwt.JWTimport com.auth0.jwt.algorithms.Algorithmimport com.auth0.jwt.interfaces.DecodedJWTimport java.security.interfaces.RSAPrivateKeyimport java.security.interfaces.RSAPublicKeyimport java.util.Date

// Token-Generierungfun createRsaToken(userId: String, privateKey: RSAPrivateKey): String { val algorithm = Algorithm.RSA256(null, privateKey) return JWT.create() .withSubject(userId) .withIssuer("auth0") .withExpiresAt(Date(System.currentTimeMillis() + 3600_000)) .sign(algorithm)}

// Token-Überprüfungfun verifyRsaToken(token: String, publicKey: RSAPublicKey): DecodedJWT? { return try { val algorithm = Algorithm.RSA256(publicKe

Empfehlungen