Cliente OAuth para Kotlin: biblioteca Ktor OAuth para autenticação em API

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Cliente OAuth para Kotlin: biblioteca Ktor OAuth



A biblioteca Ktor OAuth é uma extensão oficial para o cliente HTTP Ktor, projetada para implementar o protocolo OAuth 2.0 em aplicações Kotlin. Ela fornece uma maneira flexível e type-safe de integrar com provedores OAuth populares (Google, GitHub, Facebook, VK e outros), além de suportar endpoints personalizados. A biblioteca faz parte do ecossistema Ktor e pode ser usada tanto em aplicações Kotlin do lado do servidor quanto do lado do cliente.



O principal caso de uso é obter tokens de acesso para trabalhar com REST APIs protegidas. A biblioteca automatiza o processo de troca do código de autorização por tokens, renovação de tokens (refresh token) e gerenciamento do estado da sessão.



Principais recursos



  • Suporte aos fluxos OAuth 2.0: Authorization Code Grant, Implicit Grant, Client Credentials, Resource Owner Password Credentials.
  • Suporte integrado para provedores populares: Google, GitHub, Facebook, Twitter, VK, Yandex, Microsoft e outros.
  • Provedores personalizados: possibilidade de definir endpoints de autorização, token e redirecionamento manualmente.
  • Renovação automática de tokens: suporte a refresh token com chamada automática quando o access token expira.
  • Trabalho com sessões: armazenamento de tokens em memória, arquivos, bancos de dados ou armazenamentos personalizados.
  • Integração com Ktor Client: configuração unificada através de plugins, suporte a todos os transportes (CIO, Apache, OkHttp).
  • Segurança: suporte a PKCE (Proof Key for Code Exchange) para proteção contra ataques CSRF.


Instalação



Para adicionar a biblioteca, inclua a dependência no 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")    // Engine específico (por exemplo, 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>


Exemplo: autorização via Google OAuth



Crie um cliente HTTP com o plugin OAuth configurado para o 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 -> // Geração da URL para redirecionamento do usuário "http://localhost:8080/login" } } } }

// Exemplo de requisição para a Google Sheets API val response: HttpResponse = client.get("https://sheets.googleapis.com/v4/spreadsheets/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms/values/Sheet1!A1:D5") println(response.bodyAsText())}


Exemplo: provedor personalizado com PKCE



Para aumentar a segurança, use PKCE (P

Recommendations