Codificador JWT

Crie e assine JSON Web Tokens com HS256, HS384, HS512

Cabeçalho

Roda localmente · Seguro para colar segredos

Payload

Roda localmente · Seguro para colar segredos

Chave Secreta

Roda localmente · Seguro para colar segredos

JWT Codificado

Output will appear here…

Sua chave secreta nunca sai do seu navegador. Toda a assinatura acontece no lado do cliente.

Veja também:Decodificador JWT

O que é codificação JWT?

Codificação JWT é o processo de criar um JSON Web Token — uma string compacta e segura para URLs que carrega um conjunto de declarações assinadas com uma chave criptográfica. O resultado é um token de três partes (header.payload.signature) definido por RFC 7519 que servidores podem verificar sem manter estado de sessão. Codificação JWT online permite criar e assinar tokens diretamente em seu navegador para testes e desenvolvimento.

O cabeçalho declara o algoritmo de assinatura (p.ex. HS256) e o tipo de token. O payload contém declarações — pares chave-valor como o assunto (sub), tempo de expiração (exp) e qualquer dado personalizado que sua aplicação necessite. Ambas as partes são serializadas como JSON, então codificadas em base64url. A assinatura é calculada sobre o cabeçalho e payload codificados usando uma chave secreta, vinculando todos os três segmentos.

Diferentemente de cookies de sessão, JWTs são autocontidos: o verificador não precisa consultar um banco de dados ou chamar um serviço externo. Isso torna a autenticação baseada em JWT popular em APIs REST, microsserviços e aplicações de página única onde autorização sem estado reduz latência e simplifica escalabilidade horizontal.

Por que usar um codificador JWT?

Gerar JWTs manualmente requer codificação base64url, serialização JSON e computação HMAC. Esta ferramenta manipula todos os três passos instantaneamente para que você possa focar em acertar as declarações.

Geração instantânea de tokens
Edite o cabeçalho, payload e chave secreta — o JWT assinado atualiza em tempo real. Sem etapa de build, sem instalação de bibliotecas, sem código repetitivo.
🔒
Múltiplos algoritmos HMAC
Alterne entre HS256, HS384 e HS512 com um clique. O cabeçalho atualiza automaticamente e a assinatura é recalculada imediatamente.
🛡️
Processamento com privacidade em primeiro lugar
Toda assinatura ocorre em seu navegador usando a API Web Crypto. Sua chave secreta e dados de payload nunca saem da sua máquina — sem servidor, sem logs, sem risco.
📋
Auxiliares de declaração com um clique
Adicione timestamps iat, exp+1h ou exp+24h com um único botão. Sem necessidade de calcular timestamps Unix manualmente ou procurar a hora de época atual.

Casos de uso do codificador JWT

Testes de autenticação de frontend
Gere tokens com declarações e tempos de expiração específicos para testar fluxos de login, lógica de atualização de token e proteção de rotas sem executar um servidor de autenticação backend.
Desenvolvimento de API backend
Crie tokens de teste com declarações sub, aud e scope personalizadas para exercitar middleware de autorização, controle de acesso baseado em função e verificações de permissão durante desenvolvimento local.
Pipelines DevOps e CI/CD
Gere tokens de curta duração para scripts de implantação, testes de integração ou comunicação entre serviços onde um fluxo OAuth completo adicionaria complexidade desnecessária.
Testes de QA e manuais
Construa tokens com declarações de casos extremos — tokens expirados, campos faltantes, públicos errados — para verificar que sua API retorna as respostas HTTP 401 ou 403 corretas.
Auditoria de segurança
Crie tokens assinados com diferentes algoritmos e comprimentos de chave secreta para validar que sua lógica de verificação rejeita corretamente assinaturas fracas ou incompatíveis.
Aprendizado e prototipagem
Estudantes e desenvolvedores novos em JWT podem experimentar com campos de cabeçalho, estruturas de declarações e algoritmos de assinatura para entender como cada parte do token funciona.

HS256 vs HS384 vs HS512: Comparação de algoritmos HMAC

Os três algoritmos usam HMAC (Hash-based Message Authentication Code) com uma chave compartilhada. A diferença está na função hash subjacente, que afeta o comprimento da assinatura e margem de segurança. Para a maioria das aplicações, HS256 fornece segurança suficiente. Escolha HS384 ou HS512 quando requisitos de conformidade (p.ex. FIPS-140) exigem um hash mais forte ou quando seus tokens carregam decisões de autorização de alto valor.

AlgoritmoHashAssinaturaVelocidadeUso típico
HS256SHA-25632 BFastestGeneral purpose, default for most libraries
HS384SHA-38448 BFastHigher security margin, FIPS-140 compliant
HS512SHA-51264 BFastMaximum HMAC security, large payloads

Referência de declarações JWT padrão

RFC 7519 define sete declarações registradas. Nenhuma é obrigatória, mas usá-las corretamente melhora interoperabilidade e segurança. A declaração exp é especialmente importante — tokens sem expiração são válidos indefinidamente se a chave secreta não for rotacionada.

DeclaraçãoNomeDescriçãoExemplo
issIssuerWho issued the token"auth.example.com"
subSubjectWho the token represents"user-123"
audAudienceIntended recipient service"api.example.com"
expExpirationUnix timestamp — token invalid after this time1717203600
nbfNot BeforeUnix timestamp — token invalid before this time1717200000
iatIssued AtUnix timestamp when the token was created1717200000
jtiJWT IDUnique token identifier for revocation tracking"a1b2c3d4"

Codificação JWT em código

Estes exemplos mostram como criar e assinar JWTs programaticamente. Cada trecho produz um token válido assinado com HS256. Para sistemas em produção, sempre defina a declaração exp e use uma chave secreta criptograficamente aleatória de pelo menos 256 bits.

JavaScript (Web Crypto API)
async function signJWT(payload, secret, alg = 'HS256') {
  const header = { alg, typ: 'JWT' }
  const enc = new TextEncoder()

  // Base64url encode header and payload
  const b64url = (obj) =>
    btoa(JSON.stringify(obj)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

  const h = b64url(header)
  const p = b64url(payload)

  // Sign with HMAC-SHA256
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(`${h}.${p}`))
  const s = btoa(String.fromCharCode(...new Uint8Array(sig)))
    .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

  return `${h}.${p}.${s}`
}

// Usage
const token = await signJWT(
  { sub: 'user-123', name: 'Alice', iat: Math.floor(Date.now() / 1000) },
  'your-256-bit-secret'
)
// → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."
Python (PyJWT)
import jwt
import time

payload = {
    "sub": "user-123",
    "name": "Alice",
    "iat": int(time.time()),
    "exp": int(time.time()) + 3600,  # expires in 1 hour
}

# Sign with HS256 (default)
token = jwt.encode(payload, "your-256-bit-secret", algorithm="HS256")
# → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."

# Verify and decode
decoded = jwt.decode(token, "your-256-bit-secret", algorithms=["HS256"])
# → {"sub": "user-123", "name": "Alice", "iat": 1717200000, "exp": 1717203600}
Node.js (jsonwebtoken)
const jwt = require('jsonwebtoken')

const payload = {
  sub: 'user-123',
  name: 'Alice',
  role: 'admin',
}

// Sign — iat is added automatically
const token = jwt.sign(payload, 'your-256-bit-secret', {
  algorithm: 'HS256',
  expiresIn: '1h',    // sets exp claim
  issuer: 'auth.example.com',  // sets iss claim
})

// Verify
const decoded = jwt.verify(token, 'your-256-bit-secret')
// → { sub: 'user-123', name: 'Alice', role: 'admin', iat: ..., exp: ... }
Go (golang-jwt)
package main

import (
    "fmt"
    "time"
    "github.com/golang-jwt/jwt/v5"
)

func main() {
    claims := jwt.MapClaims{
        "sub":  "user-123",
        "name": "Alice",
        "iat":  time.Now().Unix(),
        "exp":  time.Now().Add(time.Hour).Unix(),
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    signed, _ := token.SignedString([]byte("your-256-bit-secret"))
    fmt.Println(signed)
    // → eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOi...
}

Perguntas frequentes

Qual é a diferença entre codificação JWT e decodificação JWT?
Codificação JWT cria um token assinado a partir de um cabeçalho, payload e chave secreta. Decodificação JWT reverte o processo — lê o cabeçalho e payload codificados em base64url de volta para JSON. Decodificação não requer a chave secreta; codificação sempre requer porque a assinatura deve ser calculada.
Qual deve ser o comprimento da minha chave secreta JWT?
Para HS256, use uma chave secreta de pelo menos 256 bits (32 bytes). Para HS384, use pelo menos 384 bits (48 bytes). Para HS512, use pelo menos 512 bits (64 bytes). Chaves secretas mais curtas são tecnicamente aceitas pela maioria das bibliotecas mas reduzem a segurança efetiva da assinatura HMAC. Gere chaves secretas com um gerador aleatório criptograficamente seguro, não uma frase escolhida por humanos.
É seguro usar esta ferramenta com chaves secretas reais?
Esta ferramenta processa tudo em seu navegador usando a API Web Crypto — nenhum dado é enviado a nenhum servidor. Dito isso, evite colar chaves secretas de produção em qualquer ferramenta web como prática geral de segurança. Para gerenciamento de chaves em produção, use variáveis de ambiente ou um gerenciador de segredos como HashiCorp Vault ou AWS Secrets Manager.
Devo usar HS256 ou RS256 para minha aplicação?
Use HS256 quando o mesmo serviço cria e verifica tokens — é mais rápido e simples. Use RS256 (assimétrico) quando serviços terceirizados precisam verificar seus tokens sem a capacidade de criá-los. RS256 é comum em provedores OAuth 2.0, OpenID Connect e arquiteturas SaaS multi-inquilino.
Por que meu JWT expira imediatamente após a criação?
A declaração exp usa timestamps Unix em segundos, não milissegundos. Se você definir exp para Date.now() (que retorna milissegundos), o token parecerá expirar milhares de anos no futuro — ou se você acidentalmente usar um valor em milissegundos onde segundos são esperados, bibliotecas podem interpretá-lo como já expirado. Sempre use Math.floor(Date.now() / 1000) em JavaScript ou int(time.time()) em Python.
Posso colocar dados sensíveis no payload JWT?
Você pode, mas não deveria. O payload JWT está codificado em base64url, não encriptado — qualquer um com o token pode ler as declarações. Não armazene senhas, números de cartão de crédito ou dados pessoais no payload. Se você deve incluir informações sensíveis, use JWE (JSON Web Encryption) conforme definido em RFC 7516, que encripta todo o payload.
O que acontece se eu alterar o payload após assinar?
A assinatura se torna inválida. A assinatura HMAC é calculada sobre os bytes exatos do cabeçalho e payload codificados. Qualquer mudança — mesmo adicionar um espaço ou alterar um único caractere — produz uma assinatura completamente diferente. Um verificador implementado corretamente rejeitará o token com um erro de incompatibilidade de assinatura.