Saltar al contenido principal

Seguridad de los webhooks

Autentique los webhooks de Optacy con firmas HMAC SHA-256 usando su clave de API privada.

Debe validar cada solicitud de webhook para aceptar únicamente datos procedentes de Optacy. El objeto de firma de cada solicitud incluye tres campos:

  • un token aleatorio
  • una marca de tiempo (milisegundos transcurridos desde el 1 de enero de 1970)
  • una firma: HMAC SHA-256 de la marca de tiempo concatenada con el token aleatorio, usando como clave su clave de API privada de la pestaña Webhooks del panel

Cómo autenticar

  1. Concatene timestamp y token en una sola cadena sin espacios.
  2. Calcule el HMAC SHA-256 de esa cadena usando su clave de API privada.
  3. Compare el resumen hexadecimal con el campo signature de la solicitud.
  4. Si coinciden, acepte la solicitud; de lo contrario, rechácela.

Almacene su clave de API privada y acceda a ella de forma segura, normalmente mediante una variable de entorno.

Ejemplo en Ruby on Rails

token = params["signature"]["random_token"]
timestamp = params["signature"]["timestamp"]
signature = params["signature"]["signature"]

signed_test_data = OpenSSL::HMAC.hexdigest(
  "SHA256",
  ENV["OPTACY_WEBHOOK_PRIVATE_API_TOKEN"],
  "#{timestamp}#{token}"
)

if signed_test_data == signature
  # la solicitud se acepta
else
  raise "Optacy webhook did not authenticate"
end

Protección contra la repetición

Puede rechazar las marcas de tiempo con más de unos minutos de antigüedad para mitigar los ataques de repetición. El riesgo de repetición ya es bajo con HTTPS; esta comprobación es opcional y no se muestra en el ejemplo anterior.