Tokens JWT em Kotlin: Guia Completo com Exemplos de Código

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

Tokens JWT em Kotlin: Guia Completo para Desenvolvedores



JSON Web Token (JWT) é um formato compacto e seguro para URL, usado para transmitir declarações (claims) entre duas partes. No ecossistema Kotlin, o JWT é amplamente utilizado para autenticação, autorização e troca de dados em microsserviços, aplicativos móveis e aplicações web com Ktor ou Spring Boot. Neste artigo, vamos abordar como criar, assinar e verificar tokens JWT em Kotlin usando bibliotecas populares: JJWT (Java JWT) e Auth0 java-jwt.



O que é JWT e por que usá-lo em Kotlin?

O JWT consiste em três partes: cabeçalho (header), carga útil (payload) e assinatura (signature). Em Kotlin, os tokens JWT permitem:

  • Implementar autenticação stateless (o servidor não armazena sessões).
  • Transmitir papéis e permissões de acesso (claims).
  • Trabalhar com sistemas distribuídos e APIs.
  • Integrar-se com OAuth2 e OpenID Connect.


Instalação de bibliotecas para trabalhar com JWT em Kotlin

Para projetos Kotlin/JVM, duas bibliotecas são as mais indicadas: io.jsonwebtoken:jjwt (JJWT) e com.auth0:java-jwt. Adicione as dependências no build.gradle.kts:



// build.gradle.ktsdependencies {    // JJWT (recomendado)    implementation("io.jsonwebtoken:jjwt-api:0.12.6")    runtimeOnly("io.jsonwebtoken:jjwt-impl:0.12.6")    runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.12.6") // para JSON

// Auth0 java-jwt implementation("com.auth0:java-jwt:4.4.0")}


Criação de um token JWT com JJWT (Kotlin)

O JJWT fornece uma API fluente e limpa. Abaixo está um exemplo de criação de token com assinatura HMAC-SHA256:



import io.jsonwebtoken.Jwtsimport io.jsonwebtoken.SignatureAlgorithmimport io.jsonwebtoken.security.Keysimport java.util.Date

fun createJwtToken(userId: String, role: String): String { val secretKey = Keys.hmacShaKeyFor("my_secret_key_32_bytes_long!!".toByteArray())

val token = Jwts.builder() .setSubject(userId) .claim("role", role) .setIssuedAt(Date()) .setExpiration(Date(System.currentTimeMillis() + 3600_000)) // 1 hora .signWith(secretKey, SignatureAlgorithm.HS256) .compact()

return token}


Verificação e análise de um token JWT

Para validar o token, use Jwts.parserBuilder(). Exemplo de verificação com extração de claims:



import io.jsonwebtoken.Jwtsimport io.jsonwebtoken.security.Keys

fun validateToken(token: String): Map<String, Any>? { return try { val secretKey = Keys.hmacShaKeyFor("my_secret_key_32_bytes_long!!".toByteArray()) val claims = Jwts.parserBuilder() .setSigningKey(secretKey) .build() .parseClaimsJws(token) .body

claims } catch (e: Exception) { println("Token inválido: ${e.message}") null }}


Trabalhando com JWT via Auth0 java-jwt (Kotlin)

A biblioteca Auth0 também é popular. Exemplo de criação e verificação de token com assinatura RSA:



import com.auth0.jwt.JWTimport com.auth0.jwt.algorithms.Algorithmimport com.auth0.jwt.interfaces.DecodedJWTimport java.security.interfaces.RSAPrivateKeyimport java.security.interfaces.RSAPublicKeyimport java.util.Date

// Geração do tokenfun createRsaToken(userId: String, privateKey: RSAPrivateKey): String { val algorithm = Algorithm.RSA256(null, privateKey) return JWT.create() .withSubject(userId) .withIssuer("auth0") .withExpiresAt(Date(System.currentTimeMillis() + 3600_000)) .sign(algorithm)}

// Verificação do tokenfun verifyRsaToken(token: String, publicKey: RSAPublicKey): DecodedJWT? { return try { val algorithm = Algorithm.RSA256(publicKe

Recommendations