Validación de solicitud de webhook

Creada por Wenderson Cotta Sansão, Modificado el Lun., 15 Jun. a las 12:25 P. M. por Wenderson Cotta Sansão

Encabezados de la Solicitud


Cada solicitud enviada por Cfaz incluye el encabezado x-signature-256, que contiene un HMAC-SHA256 generado a partir del cuerpo de la solicitud y del Token configurado en el webhook.


"x-event-type": "delete", "x-signature-256": sha256=5c9a1e87b5b2c9d6d12abfa7c42b9a23e1fba1e80f29e6f4f417c48e33f96d2d, "authorization": "Bearer rombvxs5c7dsnu5fwrzm"


Validación de la Solicitud


Para garantizar que los datos recibidos realmente provienen de Cfaz, el cliente debe validar la firma HMAC.


Exemplo de validação


const { createHmac, timingSafeEqual } = require('crypto') const express = require("express") const bodyParser = require("body-parser")

const TOKEN = "SEU_TOKEN_CONFIGURADO_NO_CFAZ"

const app = express()
app.use(bodyParser.json())

function verificarHMAC(chaveSecreta, payload, hmacRecebido) {
if (!hmacRecebido || !payload) return false

const hmacLimpo = hmacRecebido.replace('sha256=', '')

const hmacEsperado = createHmac('sha256', chaveSecreta)
.update(payload, 'utf8')
.digest('hex')

try {
return timingSafeEqual(
Buffer.from(hmacLimpo, 'hex'),
Buffer.from(hmacEsperado, 'hex')
)
} catch {
return false
}
}

app.post("/webhook-test", (req, res) => {
const assinatura = req.headers["x-signature-256"]
const payload = JSON.stringify(req.body)
const valido = verificarHMAC(TOKEN, payload, assinatura)

if (!valido) {
return res.status(401).json({ error: "Assinatura inválida" })
}
console.log("Webhook válido recebido:", req.body)
res.status(200).json({ message: "Dados recebidos com sucesso!" })
})

app.listen(4000, () => {
console.log("Servidor rodando na porta 4000")
})

¿Le fue útil este artículo?

¡Qué bueno!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Díganos cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
La verificación de CAPTCHA es obligatoria.

Comentarios enviados

Agradecemos su iniciativa, e intentaremos corregir el artículo