Cliente OAuth para Kotlin: biblioteca Ktor OAuth para autenticación en API

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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

Recommendations