Los webhooks son el mecanismo estándar para conectar sistemas externos (plataformas de pago como Stripe/MercadoPago, CRMs como HubSpot, o formularios web) con tus flujos de automatización.
Sin embargo, un webhook público sin autenticación es una vulnerabilidad crítica: cualquier persona que descubra la URL podría inyectar registros falsos, saturar tu base de datos o ejecutar acciones destructivas.
Modos de Webhook en n8n: Test vs. Production
En el nodo Webhook verás dos pestañas:
- Test URL: Activa solo durante la sesión del editor mientras haces clic en "Listen for test event". Deja de escuchar en cuanto recibes una llamada.
- Production URL: Solo funciona cuando el workflow está Activo (toggle verde "Active" en la barra superior). Registra las ejecuciones en la base de datos de producción.
Nunca configures la URL de test en un proveedor de pagos o CRM de producción. En cuanto cierres la pestaña de tu navegador, el webhook responderá con error 404.
Validación de Firma HMAC en Node.js / n8n
Para verificar que un webhook proviene auténticamente de tu proveedor (y no de un tercero), se calcula una firma criptográfica (HMAC-SHA256) usando un secreto compartido:
const crypto = require('crypto');
// Extraer el payload raw y la cabecera recibida
const rawBody = $input.item.json.rawBody || JSON.stringify($input.item.json);
const signatureHeader = $input.item.json.headers['x-signature'];
const webhookSecret = $env.WEBHOOK_SECRET;
// Calcular HMAC SHA-256 esperado
const expectedSignature = crypto
.createHmac('sha256', webhookSecret)
.update(rawBody)
.digest('hex');
const isValid = crypto.timingSafeEqual(
Buffer.from(signatureHeader || ''),
Buffer.from(expectedSignature)
);
if (!isValid) {
throw new Error('Firma de webhook inválida. Petición rechazada.');
}
return {
json: {
autenticado: true,
payload: $input.item.json.body
}
};
Validación Teórica
¿Por qué se debe utilizar crypto.timingSafeEqual() en lugar de un simple operador de comparación '===' al contrastar firmas criptográficas?
Ejercicio Práctico
Construcción de un webhook autenticado
Configura la protección del endpoint en tu n8n:
¿Cómo valoras el contenido técnico de esta lección?
Tu feedback nos ayuda a mejorar los laboratorios prácticos de Eje Z.