OAuth-Client für Kotlin: Ktor OAuth-Bibliothek
Die Ktor OAuth-Bibliothek ist eine offizielle Erweiterung für den Ktor HTTP-Client, die zur Implementierung des OAuth 2.0-Protokolls in Kotlin-Anwendungen entwickelt wurde. Sie bietet eine flexible und typsichere Möglichkeit zur Integration mit gängigen OAuth-Anbietern (Google, GitHub, Facebook, VK u.a.) und unterstützt auch benutzerdefinierte Endpunkte. Die Bibliothek ist Teil des Ktor-Ökosystems und kann sowohl in Server- als auch in Client-Kotlin-Anwendungen verwendet werden.
Der Hauptanwendungsfall ist das Abrufen von Zugriffstokens für die Arbeit mit geschützten REST-APIs. Die Bibliothek automatisiert den Prozess des Austauschs eines Autorisierungscodes gegen Tokens, die Aktualisierung von Tokens (Refresh Token) und die Verwaltung des Sitzungszustands.
Wichtige Funktionen
- Unterstützung von OAuth 2.0-Abläufen: Authorization Code Grant, Implicit Grant, Client Credentials, Resource Owner Password Credentials.
- Integrierte Unterstützung gängiger Anbieter: Google, GitHub, Facebook, Twitter, VK, Yandex, Microsoft u.a.
- Benutzerdefinierte Anbieter: Möglichkeit, Autorisierungs-, Token- und Redirect-Endpunkte manuell festzulegen.
- Automatische Token-Aktualisierung: Unterstützung für Refresh Token mit automatischem Aufruf bei Ablauf des Access Tokens.
- Sitzungsverwaltung: Speicherung von Tokens im Arbeitsspeicher, in Dateien, Datenbanken oder benutzerdefinierten Speichern.
- Integration mit Ktor Client: Einheitliche Konfiguration über Plugins, Unterstützung aller Transporte (CIO, Apache, OkHttp).
- Sicherheit: Unterstützung von PKCE (Proof Key for Code Exchange) zum Schutz vor CSRF-Angriffen.
Installation
Fügen Sie die Abhängigkeit in build.gradle.kts hinzu, um die Bibliothek einzubinden:
dependencies { // Haupt-Ktor-Client implementation("io.ktor:ktor-client-core:2.3.7") // OAuth-Plugin implementation("io.ktor:ktor-client-auth:2.3.7") // Spezifische Engine (z.B. CIO) implementation("io.ktor:ktor-client-cio:2.3.7")}Für Maven:
<dependency> <groupId>io.ktor</groupId> <artifactId>ktor-client-auth</artifactId> <version>2.3.7</version></dependency>Beispiel: Autorisierung über Google OAuth
Erstellen Sie einen HTTP-Client mit dem OAuth-Plugin, das für Google konfiguriert ist:
import io.ktor.client.*import io.ktor.client.plugins.auth.*import io.ktor.client.plugins.auth.providers.*import io.ktor.client.request.*import io.ktor.client.statement.*
suspend fun main() { val client = HttpClient { install(Auth) { oauth { clientId = System.getenv("GOOGLE_CLIENT_ID") clientSecret = System.getenv("GOOGLE_CLIENT_SECRET") providerLookup = { OAuthServerSettings.OAuthAuthorizationCodeServerSettings( authorizeUrl = "https://accounts.google.com/o/oauth2/auth", tokenUrl = "https://oauth2.googleapis.com/token", clientId = clientId, clientSecret = clientSecret, redirectUrl = "http://localhost:8080/callback" ) } urlProvider = { request -> // Generierung der URL für die Benutzerweiterleitung "http://localhost:8080/login" } } } }
// Beispielanfrage an die Google Sheets API val response: HttpResponse = client.get("https://sheets.googleapis.com/v4/spreadsheets/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms/values/Sheet1!A1:D5") println(response.bodyAsText())}Beispiel: Benutzerdefinierter Anbieter mit PKCE
Verwenden Sie PKCE (P