Tokens JWT em Swift: guia completo para trabalhar com JSON Web Tokens

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 Swift (iOS/macOS): guia completo



JSON Web Token (JWT) é uma forma compacta e segura para URL de transmitir dados entre partes no formato JSON. No ecossistema Apple (iOS, macOS, watchOS, tvOS), o JWT é amplamente utilizado para autenticação de usuários, troca de informações entre serviços e implementação de Single Sign-On. Neste artigo, vamos abordar como trabalhar com tokens JWT em Swift, quais bibliotecas usar e como implementar o ciclo completo: desde a criação até a verificação.



O que é JWT e por que ele é necessário no iOS/macOS?



O JWT consiste em três partes, separadas por pontos:



  • Header — cabeçalho contendo o tipo do token e o algoritmo de assinatura (por exemplo, HS256 ou RS256).
  • Payload — carga útil com dados (claims), como identificador do usuário, data de expiração (exp), emissor (iss) e outros.
  • Signature — assinatura criada com base no header, payload e chave secreta (ou par de chaves para algoritmo assimétrico).


Em aplicativos móveis, o JWT é geralmente usado para:

  • Armazenar a sessão do usuário após o login.
  • Transmitir direitos de acesso entre o cliente e o servidor.
  • Troca segura de dados entre microsserviços.


Bibliotecas populares para trabalhar com JWT em Swift



Existem várias bibliotecas testadas que facilitam o trabalho com JWT nas plataformas Apple:



  • Swift-JWT (IBM) — uma das mais populares, suporta HS256, RS256, ES256 e outros algoritmos, funciona no iOS, macOS, Linux.
  • JWTDecode (Auth0) — biblioteca leve apenas para decodificação e verificação de assinatura (sem criação de tokens).
  • Vapor JWT — para o lado do servidor em Swift (Vapor), mas também pode ser usado em projetos cliente.
  • Kitura-CredentialsJWT — parte do ecossistema Kitura da IBM.


Neste artigo, vamos focar na biblioteca Swift-JWT, pois é a mais versátil e ativamente mantida.



Instalação do Swift-JWT via Swift Package Manager (SPM)



Adicione a dependência no arquivo Package.swift ou via Xcode:



// Package.swiftdependencies: [    .package(url: "https://github.com/Kitura/Swift-JWT.git", from: "4.0.0")],targets: [    .target(name: "YourTarget", dependencies: ["SwiftJWT"])]


Ou no Xcode: File → Swift Packages → Add Package Dependency e informe a URL: https://github.com/Kitura/Swift-JWT.git.



Criação de um token JWT usando chave simétrica (HS256)



Veja um exemplo de criação de JWT com o algoritmo HS256 (chave simétrica):



import SwiftJWT

// Define a estrutura para o payloadstruct MyClaims: Claims { let sub: String let exp: Date let iss: String let admin: Bool}

// Cria a carga útillet claims = MyClaims( sub: "1234567890", exp: Date(timeIntervalSinceNow: 3600), // token válido por 1 hora iss: "pythonlib.ru", admin: true)

// Cria o objeto JWTvar jwt = JWT(claims: claims)

// Define o cabeçalho (opcional, padrão é HS256)let header = Header(kid: "my-key-id")jwt.header = header

// Chave secreta (em um projeto real, armazene no Keychain ou .env)let privateKey = "my-secret-key".data(using: .utf8)!

// Assina e obtém a string do tokendo { let signedJWT = try jwt.sign(using: .hs256(key: privateKey)) print("JWT criado:\\(signedJWT)")} catch { print("Erro na assinatura: \\(error)")}


Verificação e decodificação de JWT



Para verificar a assinatura e extrair os dados do token, use:



let jwtString = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiZXhwIjoxNjg5OTk5OTk5LCJpc3MiOiJweXRob25saWIucnUiLCJhZG1                    

Recommendations