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!