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
- Concatene
timestampytokenen una sola cadena sin espacios. - Calcule el HMAC SHA-256 de esa cadena usando su clave de API privada.
- Compare el resumen hexadecimal con el campo
signaturede la solicitud. - 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.