# Verificar firmas de webhooks

Verifique las firmas HMAC, verifique las marcas de tiempo y maneje webhooks duplicados.

## Conservar el cuerpo original de la solicitud
Verifique los bytes recibidos antes de analizar/volver a serializar JSON. Incluso los espacios en blanco cambian la MAC. Configure el manejo del cuerpo sin formato de su marco en consecuencia.

## Encabezados
Utilice `Tembuilder-Event`, `Tembuilder-Delivery-Id`, `Tembuilder-Attempt`, `Tembuilder-Timestamp` y `Tembuilder-Signature`. La firma es `v1=` más un hexadecimal HMAC-SHA256. El secreto de firma revelado es base64url sin relleno; decodificarlo en bytes primero.

## Bytes firmados
```text
timestamp + "." + raw_body
```

Calcule HMAC-SHA256 con el secreto decodificado y compárelo en tiempo constante.

## Marca de tiempo y duplicados
Aplique una ventana de aceptación adecuada en el receptor, por ejemplo de ±5 minutos si resulta apropiado para sus relojes y su operación. Esta es una recomendación para el receptor, no una garantía de tiempo de entrega de Tembuilder. Elimine los ID de entrega duplicados y concilie el estado del negocio mediante el ID de renderizado. No suponga que las notificaciones se reciben exactamente una vez ni en orden.

## Prueba antes de la producción
Aceptar una prueba correctamente firmada. Rechace un cambio de cuerpo de un byte y una marca de tiempo obsoleta. Entregue la misma identificación dos veces y verifique que los efectos secundarios comerciales no estén duplicados. Mantenga los secretos y las cargas útiles confidenciales fuera de los registros.
