OAuth 2.0 und JWT-Autorisierung in Kotlin: Schritt-für-Schritt-Anleitung

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

OAuth 2.0 und JWT-Autorisierung in Kotlin: für Anfänger



Moderne Webanwendungen und APIs kommen selten ohne ein Authentifizierungs- und Autorisierungssystem aus. Die beiden gängigsten Standards in diesem Bereich sind OAuth 2.0 und JWT (JSON Web Token). In diesem Artikel werden wir uns ansehen, wie man die Autorisierung in Kotlin mit diesen Technologien implementiert. Das Material richtet sich an Anfänger, die mit den Grundlagen der Sprache und des Frameworks Spring Boot vertraut sind.



Was sind OAuth 2.0 und JWT?



Bevor wir Code schreiben, ist es wichtig, die Theorie zu verstehen.



OAuth 2.0 ist ein Autorisierungsprotokoll, das es Anwendungen ermöglicht, eingeschränkten Zugriff auf die Ressourcen eines Benutzers zu erhalten, ohne Login und Passwort weiterzugeben. Stellen Sie sich vor, Sie melden sich auf einer Website mit "Anmelden über Google" an – das ist OAuth 2.0.



JWT ist ein kompaktes und eigenständiges Token-Format. Es besteht aus drei Teilen: Header, Payload und Signatur. JWT wird häufig zusammen mit OAuth 2.0 verwendet, um Authentifizierungsinformationen zu übertragen.



Die wichtigsten OAuth 2.0-Abläufe:

  • Authorization Code Flow – für Serveranwendungen (am sichersten)
  • Client Credentials Flow – für Server-zu-Server-Kommunikation
  • Implicit Flow – veraltet, nicht empfohlen
  • Resource Owner Password Flow – nur, wenn Sie dem Client vertrauen


In diesem Artikel konzentrieren wir uns auf den Client Credentials Flow, da er am einfachsten zu verstehen ist und häufig in Microservices verwendet wird.



Einrichten des Spring Boot-Projekts in Kotlin



Erstellen wir ein neues Spring Boot-Projekt mit Kotlin-Unterstützung. Fügen wir die erforderlichen Abhängigkeiten in build.gradle.kts hinzu:



dependencies {    implementation("org.springframework.boot:spring-boot-starter-web")    implementation("org.springframework.boot:spring-boot-starter-security")    implementation("org.springframework.boot:spring-boot-starter-oauth2-resource-server")    implementation("io.jsonwebtoken:jjwt-api:0.11.5")    runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.5")    runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.5")    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")}


Diese Abhängigkeiten bieten Unterstützung für Spring Security, OAuth 2.0 Resource Server und die JJWT-Bibliothek für die Arbeit mit JWT.



Erstellen von JWT-Tokens in Kotlin



Schreiben wir einen Service zum Generieren und Validieren von JWT. Dies ist die Grundlage unserer Autorisierung.



import io.jsonwebtoken.Jwtsimport io.jsonwebtoken.SignatureAlgorithmimport io.jsonwebtoken.security.Keysimport org.springframework.stereotype.Serviceimport java.util.Date

@Serviceclass JwtService { private val secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS256) private val expirationMs = 3600000L // 1 Stunde

fun generateToken(clientId: String): String { val now = Date() val expiryDate = Date(now.time + expirationMs)

return Jwts.builder() .setSubject(clientId) .setIssuedAt(now) .setExpiration(expiryDate) .signWith(secretKey) .compact() }

fun validateToken(token: String): Boolean { return try { Jwts.parserBuilder() .setSigningKey(secretKey) .build() .parseClaimsJws(token) true } catch (e: Exception) { false } }

fun getClientIdFromToken(token: String): String { val claims = Jwts.parserBuilder() .setSigningKey(secretKey) .build() .parseClaimsJws(token) .body return claims.subject }}


In diesem Service verwenden wir einen symmetrischen Schlüssel. In der Produktion sollte besser eine asymmetrische Verschlüsselung (RS256) verwendet werden und

Blogs

Buchempfehlungen