Pular para o conteúdo principal

Segurança JWT

Implementar autenticação JWT (JSON Web Tokens) de forma segura é fundamental para proteger suas integrações no n8n. Este guia mostra como configurar e gerenciar tokens de forma segura.

O que você aprenderá

  • Configuração de JWT segura
  • Rotação automática de tokens
  • Boas práticas de segurança
  • Troubleshooting comum

Configuração de JWT

Estrutura Básica de JWT

// Estrutura de um JWT
const jwt = {
  header: {
    "alg": "HS256",
    "typ": "JWT"
  },
  payload: {
    "sub": "user123",
    "iat": 1516239022,
    "exp": 1516242622
  },
  signature: "encrypted_signature"
}

Configuração Segura

// Configuração segura de JWT
const jwtConfig = {
  secret: process.env.JWT_SECRET,
  algorithm: 'HS256',
  expiresIn: '1h',
  issuer: 'n8n',
  audience: 'n8n-api'
}

Tipos de Credenciais

API Keys

// <IonicIcon name="checkmark-circle-outline" style={{fontSize: '16px', color: '#10b981'}} /> Configuração segura de API Key
{
  "name": "Google Sheets API",
  "type": "googleSheetsOAuth2Api",
  "data": {
    "accessToken": "encrypted_token",
    "refreshToken": "encrypted_refresh_token"
  }
}

OAuth Tokens

// <IonicIcon name="checkmark-circle-outline" style={{fontSize: '16px', color: '#10b981'}} /> Configuração OAuth2
{
  "name": "Slack Integration",
  "type": "slackOAuth2Api",
  "data": {
    "accessToken": "encrypted_token",
    "scope": "chat:write,channels:read"
  }
}

Basic Auth

// <IonicIcon name="checkmark-circle-outline" style={{fontSize: '16px', color: '#10b981'}} /> Configuração Basic Auth
{
  "name": "Internal API",
  "type": "httpBasicAuth",
  "data": {
    "user": "encrypted_username",
    "password": "encrypted_password"
  }
}

Rotação de Credenciais

Monitoramento de Expiração

// <IonicIcon name="checkmark-circle-outline" style={{fontSize: '16px', color: '#10b981'}} /> Verificar expiração de tokens
async function checkTokenExpiry(credentials) {
  const token = credentials.data.accessToken
  const decoded = jwt.decode(token, { complete: true })
  
  if (decoded.payload.exp < Date.now() / 1000) {
    return false
  }
  
  return true
}

Refresh Automático

// <IonicIcon name="checkmark-circle-outline" style={{fontSize: '16px', color: '#10b981'}} /> Refresh automático de tokens
async function refreshToken(credentials) {
  try {
    const response = await fetch(credentials.refreshUrl, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        refreshToken: credentials.refreshToken
      })
    })
    
    const newCredentials = await response.json()
    return newCredentials
  } catch (error) {
    console.error('Erro ao renovar token:', error)
    return null
  }
}

O que NUNCA fazer no n8n

// <IonicIcon name="close-circle-outline" style={{fontSize: '16px', color: '#ef4444'}} /> NUNCA hardcodar credenciais
const apiKey = "SUA_CHAVE_API_AQUI"

// <IonicIcon name="close-circle-outline" style={{fontSize: '16px', color: '#ef4444'}} /> NUNCA logar tokens
console.log('Token:', token)

Configuração Avançada

Variáveis de Ambiente

# Configurações JWT
JWT_SECRET=SUA_CHAVE_SECRETA_AQUI
JWT_EXPIRES_IN=1h
JWT_ISSUER=n8n
JWT_AUDIENCE=n8n-api

# Configurações de segurança
N8N_ENCRYPTION_KEY=your-32-byte-encryption-key
N8N_ENCRYPTION_ALGORITHM=aes-256-gcm

Implementação de Validação

// Middleware de validação JWT
function validateJWT(req, res, next) {
  const token = req.headers.authorization?.split(' ')[1]
  
  if (!token) {
    return res.status(401).json({ error: 'Token não fornecido' })
  }
  
  try {
    const decoded = jwt.verify(token, process.env.JWT_SECRET, {
      issuer: process.env.JWT_ISSUER,
      audience: process.env.JWT_AUDIENCE
    })
    
    req.user = decoded
    next()
  } catch (error) {
    return res.status(401).json({ error: 'Token inválido' })
  }
}

Troubleshooting

Problemas Comuns

Token expirado:

  • Verifique configuração de expiração
  • Implemente refresh automático
  • Configure renovação proativa

Token inválido:

  • Verifique assinatura
  • Confirme algoritmo de criptografia
  • Valide issuer e audience

Erro de criptografia:

  • Confirme chave de criptografia
  • Verifique algoritmo
  • Teste descriptografia

Ferramentas Úteis

# Decodificar JWT (sem verificar assinatura)
echo "SEU_JWT_TOKEN_AQUI..." | base64 -d

# Verificar expiração
jwt decode your-token-here

# Testar validação
curl -H "Authorization: Bearer your-token" https://your-api.com/validate

Próximos Passos

  1. Configure JWT com parâmetros seguros
  2. Implemente rotação automática de tokens
  3. Configure monitoramento de expiração
  4. Teste validação de tokens
  5. Implemente refresh automático

Recursos Relacionados


Pronto para implementar JWT seguro? Comece com a configuração básica!