PiramidPiramid
Webhooks

Seguridad

La clave de firma generada para tu endpoint te permite validar que el emisor del evento es Piramid y que el contenido del mismo no haya sido alterado por un tercero

Para ello, Piramid hace uso de un mecanismo de seguridad llamado HMAC

Verificar solicitud de eventos

Para verificar una solicitud de eventos, debes seguir el mecanismo de seguridad HMAC. Este mecanismo consta de los siguientes pasos:

  1. Obtén el contenido plano (sin decodificar) de la solicitud
  2. Genera un HMAC digest usando una funcion de hasheo (sha-256) y la clave de firma generada para tu endpoint
  3. Codifica el HMAC digest en formato hexadecimal
  4. Extrae la firma de la cabecera webhook-signature de la solicitud
  5. Compara el HMAC digest codificado con la firma recibida

Estos pasos los puedes implementar en cualquier lenguaje de programación que cuente con librerias de cifrado y hash.

Por ejemplo, en Node.js puedes usar la libreria crypto para implementar estos pasos:

main.ts
import express from 'express'
import crypto from 'crypto'
 
const app = express()
 
// Nos aseguramos que el contenido del body sea plano y no haya sido parseado o decodificado
app.use(express.raw({ type: '*/*' }))
 
app.post('/endpoint', (req, res) => {
  const signature = req.headers['webhook-signature']
  const rawBody = req.body
  const signingSecret = process.env.PIRAMID_WEBHOOK_SIGNING_SECRET
 
  const hmac = crypto
    .createHmac('sha256', signingSecret)
    .update(rawBody)
    .digest('hex')
 
  if (signature !== hmac)
    return res.status(401).json({ message: 'Signature does not match' })
 
  res.status(200).json({ message: 'Webhook request verified!' })
})
 
app.listen(3000, () => {
  console.log('Example app listening on port 3000!')
})

On this page