Client OAuth pour Kotlin : bibliothèque Ktor OAuth
La bibliothèque Ktor OAuth est une extension officielle pour le client HTTP Ktor, conçue pour implémenter le protocole OAuth 2.0 dans les applications Kotlin. Elle offre un moyen flexible et type-safe de s'intégrer avec les fournisseurs OAuth populaires (Google, GitHub, Facebook, VK, etc.) et prend également en charge les endpoints personnalisés. La bibliothèque fait partie de l'écosystème Ktor et peut être utilisée aussi bien dans les applications Kotlin côté serveur que côté client.
Le cas d'utilisation principal est l'obtention de tokens d'accès pour travailler avec des API REST protégées. La bibliothèque automatise le processus d'échange du code d'autorisation contre des tokens, le renouvellement des tokens (refresh token) et la gestion de l'état de la session.
Fonctionnalités clés
- Prise en charge des flux OAuth 2.0 : Authorization Code Grant, Implicit Grant, Client Credentials, Resource Owner Password Credentials.
- Prise en charge intégrée des fournisseurs populaires : Google, GitHub, Facebook, Twitter, VK, Yandex, Microsoft, etc.
- Fournisseurs personnalisés : possibilité de définir manuellement les endpoints d'autorisation, de token et de redirection.
- Renouvellement automatique des tokens : prise en charge du refresh token avec appel automatique à l'expiration de l'access token.
- Gestion des sessions : stockage des tokens en mémoire, dans des fichiers, des bases de données ou des stockages personnalisés.
- Intégration avec Ktor Client : configuration unifiée via des plugins, prise en charge de tous les transports (CIO, Apache, OkHttp).
- Sécurité : prise en charge de PKCE (Proof Key for Code Exchange) pour la protection contre les attaques CSRF.
Installation
Pour ajouter la bibliothèque, ajoutez la dépendance dans build.gradle.kts :
dependencies { // Client Ktor principal implementation("io.ktor:ktor-client-core:2.3.7") // Plugin OAuth implementation("io.ktor:ktor-client-auth:2.3.7") // Moteur spécifique (par exemple, CIO) implementation("io.ktor:ktor-client-cio:2.3.7")}Pour Maven :
<dependency> <groupId>io.ktor</groupId> <artifactId>ktor-client-auth</artifactId> <version>2.3.7</version></dependency>Exemple : autorisation via Google OAuth
Créez un client HTTP avec le plugin OAuth configuré pour Google :
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 -> // Génération de l'URL pour la redirection de l'utilisateur "http://localhost:8080/login" } } } }
// Exemple de requête vers l'API Google Sheets val response: HttpResponse = client.get("https://sheets.googleapis.com/v4/spreadsheets/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms/values/Sheet1!A1:D5") println(response.bodyAsText())}Exemple : fournisseur personnalisé avec PKCE
Pour renforcer la sécurité, utilisez PKCE (P
Aussi dans la bibliothèque
Files d'attente de tâches en Kotlin : Coroutines, KJob et modèles avancés
Travail avec Apache Kafka en C# (.NET) : bibliothèque Confluent.Kafka
Ramsey/UUID PHP : guide complet avec exemples pratiques
Métriques Prometheus en C# (.NET) — bibliothèque prometheus-net
Métriques Prometheus en TypeScript : guide complet de monitoring