Nahui Connect / Documentación

Verificación de firma

Valida X-Nahui-Signature-256 con HMAC SHA-256, Base64URL sin padding y comparación en tiempo constante.

Verifica la firma sobre los bytes exactos del cuerpo recibido, antes de ejecutar JSON.parse o cualquier parser equivalente.

Encabezado

HTTP
X-Nahui-Signature-256: sha256=BASE64URL_SIN_PADDING

Algoritmo

  1. Conserva los bytes exactos del cuerpo recibido.
  2. Calcula HMAC SHA-256 usando el secreto nhs_... como clave.
  3. Codifica el resultado en Base64URL sin = al final.
  4. Agrega el prefijo sha256=.
  5. Compara en tiempo constante con el encabezado recibido.
  6. Solo después de validar ejecuta JSON.parse.
Pseudocódigo
esperada = "sha256=" + base64url_sin_padding(
  hmac_sha256(NAHUI_WEBHOOK_SECRET, RAW_BODY)
)

Si falta el encabezado o no coincide, responde 401 y no proceses el evento.

Patrón correcto

JavaScript
const rawBody = await request.text();
verifySignature(rawBody, request.headers.get('x-nahui-signature-256'));
const event = JSON.parse(rawBody);

Patrón incorrecto

No usar
const event = await request.json();
const rawBody = JSON.stringify(event);
// La serialización puede cambiar y romper o debilitar la validación.

Además de firma, valida el esquema del evento y deduplica por deliveryId antes de ejecutar efectos externos.