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 JWTEstrutura 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 CredenciaisAPI 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 CredenciaisMonitoramento 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çadaVariá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' })
}
}
TroubleshootingProblemas 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- Configure JWT com parâmetros seguros
- Implemente rotação automática de tokens
- Configure monitoramento de expiração
- Teste validação de tokens
- Implemente refresh automático
Recursos Relacionados- Políticas de Segurança - Políticas robustas
- Boas Práticas - Práticas recomendadas
- Segurança - Configurações de segurança
- Comunidade - Suporte e dicas
Pronto para implementar JWT seguro? Comece com a configuração básica!