OAuth 2.0 e autorização JWT em Kotlin: guia passo a passo

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

OAuth 2.0 e autorização JWT em Kotlin: para iniciantes



As aplicações web e APIs modernas raramente funcionam sem um sistema de autenticação e autorização. Os dois padrões mais populares nesta área são OAuth 2.0 e JWT (JSON Web Token). Neste artigo, vamos abordar como implementar a autorização em Kotlin usando essas tecnologias. O material é voltado para desenvolvedores iniciantes familiarizados com os fundamentos da linguagem e do framework Spring Boot.



O que são OAuth 2.0 e JWT?



Antes de escrever código, é importante entender a teoria.



OAuth 2.0 é um protocolo de autorização que permite que aplicativos obtenham acesso limitado aos recursos do usuário sem transmitir login e senha. Imagine que você entra em um site através de "Entrar com Google" — isso é OAuth 2.0.



JWT é um formato de token compacto e autossuficiente. Ele consiste em três partes: cabeçalho (header), payload (payload) e assinatura (signature). O JWT é frequentemente usado junto com o OAuth 2.0 para transmitir informações de autenticação.



Principais fluxos do OAuth 2.0:

  • Authorization Code Flow — para aplicações servidoras (o mais seguro)
  • Client Credentials Flow — para comunicação servidor-servidor
  • Implicit Flow — obsoleto, não recomendado
  • Resource Owner Password Flow — apenas se você confiar no cliente


Neste artigo, vamos nos concentrar no Client Credentials Flow, pois é o mais fácil de entender e frequentemente usado em microsserviços.



Configuração do projeto Spring Boot em Kotlin



Vamos criar um novo projeto Spring Boot com suporte a Kotlin. Adicione as dependências necessárias no build.gradle.kts:



dependencies {    implementation("org.springframework.boot:spring-boot-starter-web")    implementation("org.springframework.boot:spring-boot-starter-security")    implementation("org.springframework.boot:spring-boot-starter-oauth2-resource-server")    implementation("io.jsonwebtoken:jjwt-api:0.11.5")    runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.5")    runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.5")    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")}


Essas dependências fornecem suporte para Spring Security, OAuth 2.0 Resource Server e a biblioteca JJWT para trabalhar com JWT.



Criação de tokens JWT em Kotlin



Vamos escrever um serviço para gerar e validar JWT. Esta é a base da nossa autorização.



import io.jsonwebtoken.Jwtsimport io.jsonwebtoken.SignatureAlgorithmimport io.jsonwebtoken.security.Keysimport org.springframework.stereotype.Serviceimport java.util.Date

@Serviceclass JwtService { private val secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS256) private val expirationMs = 3600000L // 1 hora

fun generateToken(clientId: String): String { val now = Date() val expiryDate = Date(now.time + expirationMs)

return Jwts.builder() .setSubject(clientId) .setIssuedAt(now) .setExpiration(expiryDate) .signWith(secretKey) .compact() }

fun validateToken(token: String): Boolean { return try { Jwts.parserBuilder() .setSigningKey(secretKey) .build() .parseClaimsJws(token) true } catch (e: Exception) { false } }

fun getClientIdFromToken(token: String): String { val claims = Jwts.parserBuilder() .setSigningKey(secretKey) .build() .parseClaimsJws(token) .body return claims.subject }}


Neste serviço, usamos uma chave simétrica. Em produção, é melhor usar criptografia assimétrica (RS256) e

Blogs

Book Recommendations