Cliente OAuth para Kotlin: biblioteca Ktor OAuth
La biblioteca Ktor OAuth es una extensión oficial para el cliente HTTP Ktor, diseñada para implementar el protocolo OAuth 2.0 en aplicaciones Kotlin. Proporciona una forma flexible y type-safe de integrarse con proveedores OAuth populares (Google, GitHub, Facebook, VK, etc.), y también admite endpoints personalizados. La biblioteca forma parte del ecosistema Ktor y se puede utilizar tanto en aplicaciones Kotlin del lado del servidor como del cliente.
El caso de uso principal es la obtención de tokens de acceso para trabajar con APIs REST protegidas. La biblioteca automatiza el proceso de intercambio del código de autorización por tokens, la actualización de tokens (refresh token) y la gestión del estado de la sesión.
Características clave
- Soporte de flujos OAuth 2.0: Authorization Code Grant, Implicit Grant, Client Credentials, Resource Owner Password Credentials.
- Soporte integrado para proveedores populares: Google, GitHub, Facebook, Twitter, VK, Yandex, Microsoft y otros.
- Proveedores personalizados: posibilidad de especificar manualmente los endpoints de autorización, token y redirección.
- Actualización automática de tokens: soporte para refresh token con invocación automática al caducar el access token.
- Trabajo con sesiones: almacenamiento de tokens en memoria, archivos, bases de datos o almacenes personalizados.
- Integración con Ktor Client: configuración unificada a través de plugins, soporte para todos los transportes (CIO, Apache, OkHttp).
- Seguridad: soporte para PKCE (Proof Key for Code Exchange) para protección contra ataques CSRF.
Instalación
Para agregar la biblioteca, añada la dependencia en build.gradle.kts:
dependencies { // Cliente Ktor principal implementation("io.ktor:ktor-client-core:2.3.7") // Plugin OAuth implementation("io.ktor:ktor-client-auth:2.3.7") // Motor específico (por ejemplo, CIO) implementation("io.ktor:ktor-client-cio:2.3.7")}Para Maven:
<dependency> <groupId>io.ktor</groupId> <artifactId>ktor-client-auth</artifactId> <version>2.3.7</version></dependency>Ejemplo: autorización a través de Google OAuth
Cree un cliente HTTP con el plugin OAuth configurado para 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 -> // Generación de URL para redirigir al usuario "http://localhost:8080/login" } } } }
// Ejemplo de solicitud a la API de Google Sheets val response: HttpResponse = client.get("https://sheets.googleapis.com/v4/spreadsheets/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms/values/Sheet1!A1:D5") println(response.bodyAsText())}Ejemplo: proveedor personalizado con PKCE
Para aumentar la seguridad, utilice PKCE (P
También en la biblioteca
Configuración de aplicaciones C# (.NET): Microsoft.Extensions.Configuration
Cliente REST de Elasticsearch para Kotlin: guía de uso
Tokens JWT en Go (Golang): biblioteca golang-jwt y ejemplos de uso
Regex en Rust: guía completa con ejemplos prácticos
Trabajo con Markdown en C++: bibliotecas md4c, cmark y cpp-markdown