Tokens JWT em Swift: Trabalhando com JSON Web Token no iOS/macOS

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

\n\n

JSON Web Token (JWT) é um padrão aberto (RFC 7519) para criar tokens de acesso baseados em JSON. JWT é amplamente utilizado para autenticação e troca de informações entre cliente e servidor. No ecossistema Apple (iOS, macOS, watchOS, tvOS), trabalhar com JWT torna-se crítico ao desenvolver aplicativos que interagem com APIs REST, microsserviços ou qualquer sistema que exija transmissão segura de dados.

\n\n

Este artigo é dedicado à biblioteca SwiftJWT — a solução mais popular e ativamente mantida para trabalhar com JWT na linguagem Swift. Abordaremos instalação, operações básicas (criação, assinatura, verificação) e cenários avançados de uso.

\n\n

O que é SwiftJWT?

\n\n

SwiftJWT é uma biblioteca leve e nativa para Swift que permite:

\n
    \n
  • Criar JWTs com claims (declarações) arbitrárias
  • \n
  • Assinar tokens usando algoritmos: HS256, HS384, HS512 (simétricos) e RS256, RS384, RS512 (assimétricos, baseados em RSA)
  • \n
  • Verificar a assinatura e a validade do token
  • \n
  • Decodificar o payload sem verificar a assinatura (por exemplo, para exibir informações no cliente)
  • \n
  • Trabalhar com dados personalizados e campos padrão (iss, sub, exp, iat, etc.)
  • \n
\n\n

A biblioteca é escrita inteiramente em Swift, não requer dependências externas (além de Foundation e Security) e é compatível com Swift Package Manager (SPM), CocoaPods e Carthage.

\n\n

Instalação via Swift Package Manager

\n\n

Adicione o pacote ao seu projeto via Xcode ou diretamente no Package.swift:

\n\n
// Package.swift\ndependencies: [\n    .package(url: "https://github.com/Kitura/Swift-JWT.git", from: "4.0.0")\n],\ntargets: [\n    .target(name: "YourTarget", dependencies: ["SwiftJWT"])\n]\n
\n\n

Operações Básicas com JWT

\n\n

1. Criação e Assinatura de Token (HS256)

\n\n

O caso mais simples — criar um token usando uma chave simétrica:

\n\n
import SwiftJWT\n\n// 1. Definir a estrutura Claims (declarações)\nstruct MyClaims: Claims {\n    let iss: String\n    let sub: String\n    let exp: Date\n    let admin: Bool\n    let customData: String\n}\n\n// 2. Criar uma instância de Claims\nlet claims = MyClaims(\n    iss: "com.yourcompany.app",\n    sub: "user123",\n    exp: Date(timeIntervalSinceNow: 3600), // +1 hora\n    admin: true,\n    customData: "some_value"\n)\n\n// 3. Definir a chave (para HS256 — qualquer string)\nlet secretKey = "your-256-bit-secret".data(using: .utf8)!\n\n// 4. Criar o JWT\nvar jwt = JWT(claims: claims)\nlet signedJWT = try jwt.sign(using: .hs256(key: secretKey))\nprint("Token criado:\\n\\(signedJWT)")\n
\n\n

2. Verificação e Decodificação de Token

\n\n
// Verificação com checagem de assinatura e validade\nlet receivedToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."\n\ndo {\n    // Verificar e decodificar\n    let verifiedJWT = try JWT<MyClaims>.verify(token: receivedToken, using: .hs256(key: secretKey))\n    print("Token válido. Claims: \\(verifiedJWT.claims)")\n    \n    // Verificar campos específicos\n    if verifiedJWT.claims.admin {\n        print("O usuário é administrador")\n    }\n} catch {\n    print("Erro de verificação: \\(error)")\n    // Erros possíveis: expiredToken, invalidSignature, malformedToken\n}\n\n// Decodificação sem verificação (apenas para leitura de dados)\nif let payload = try? JWTDecoder().decodePayload(from: receivedToken) {\n    print("Payload (sem verificação): \\(payload)")\n}\n
\n\n

3. Trabalhando com Chaves Assimétricas (RS256)

\n\n

Para ambientes de produção, recomenda-se o uso de criptografia assimétrica (RSA). O servidor assina o token com a chave privada, e o cliente verifica com a chave pública:

\n\n
//                    

Recommendations