Verificación de webhooks firmados

Muchos servicios firman los webhooks que envían, de modo que el destinatario pueda comprobar que una solicitud procede realmente de ellos y que no ha sido alterada durante el trayecto. Si configura la autenticación de un webhook en HMAC, la aplicación comprueba dicha firma antes de que nada llegue a Shopify Flow. Una solicitud que no supere la comprobación se rechaza con el código de error 401 y nunca se ejecuta ningún flujo de trabajo.

Hay dos formas de configurarlo: seleccione el remitente de la lista o describa cómo firma.

Proveedores integrados

Seleccione el proveedor en la sección «Proveedor de firma» y pegue su clave de firma. A continuación, la aplicación verifica que el proveedor cumpla con los requisitos de documentación - el encabezado correcto, la codificación, el contenido firmado y la ventana de reproducción - , por lo que no es necesario configurar nada más. Cada proveedor cuenta con su propia guía de configuración, desde la creación del punto final hasta la configuración del flujo de trabajo de Shopify Flow.

Proveedor Guía de configuración También abarca
Calendly Cómo conectar Calendly a Shopify Flow -
Customer.io Cómo conectar Customer.io a Shopify Flow -
GitHub Cómo conectar GitHub a Shopify Flow -
Exprimidor de limones Cómo conectar Lemon Squeezy a unShopify Flow -
Lineal Cómo conectar Linear a Shopify Flow -
Mollie Cómo conectar Mollie a Shopify Flow -
Remo Cómo conectar Paddle a Shopify Flow -
Paystack Cómo conectar Paystack a Shopify Flow -
Razorpay Cómo conectar Razorpay a Shopify Flow -
Cordura Cómo conectar Sanity a Shopify Flow -
Sendcloud Cómo conectar Sendcloud a Shopify Flow -
Sentry Cómo conectar Sentry a Shopify Flow -
Shopify Cómo conectar Shopify a Shopify Flow -
Slack Cómo conectar Slack a Shopify Flow -
Cuadrado Cómo conectar Square a Shopify Flow -
Webhooks estándar Cómo conectar los webhooks estándar a Shopify Flow OpenAI, Supabase Auth Hooks
Rayas Cómo conectar Stripe a Shopify Flow -
Svix Cómo conectar Svix a Shopify Flow Empleado, Reenviar, Superwall
Typeform Cómo conectar Typeform a Shopify Flow -
Vercel Cómo conectar Vercel a Shopify Flow -
WooCommerce Cómo conectar WooCommerce a Shopify Flow -
Zendesk Cómo conectar Zendesk a Shopify Flow -

En cada guía se detalla exactamente qué aspectos comprueba la aplicación en relación con ese remitente y dónde se encuentra su secreto de firma.

Un webhook con autenticación HMAC y Stripe como proveedor de firmas, en el que se muestra el campo «secreto de firma», qué se comprueba y los pasos para conectar Stripe
Un remitente firmado, en este caso Stripe: seleccione el proveedor, pegue su clave secreta de firma y el editor le mostrará qué opciones están marcadas y cómo conectarlo.

Firma personalizada: cualquier otro remitente

Si su remitente no figura en la lista, seleccione «Firma personalizada» y describa cómo se realiza la firma. La documentación de su proveedor incluirá una línea similar a esta:

X-Acme-Signature = hex(hmac_sha256(secret, timestamp + "." + body))

Esa única línea responde a todos los campos:

Escenario Según el ejemplo Qué significa
Encabezado de la firma X-Acme-Signature El encabezado que contiene la firma
Algoritmo hmac_sha256 SHA-256, SHA-1 o SHA-512
Codificación hex hexadecimal, base64 o base64url
Payload firmado {timestamp}.{body} El texto exacto que se firmó
Marca de tiempo un encabezado como X-Acme-Timestamp Por dónde circula el valor de timestamp
Tolerancia de repetición 300 segundos Rechace las solicitudes anteriores a esta fecha

The signed payload

Escriba lo que firma el remitente utilizando estos marcadores de posición:

Marca de posición Se convierte en
{body} El cuerpo de la solicitud sin procesar, byte a byte. Obligatorio.
{timestamp} La marca de tiempo del encabezado o del encabezado de la firma
{url} La URL de este webhook, tal y como la introdujo en el remitente
{header:name} El valor de otro encabezado de solicitud

Formatos habituales: {body}, {timestamp}.{body}, {timestamp}{body}, v0:{timestamp}:{body}, {header:webhook-id}.{timestamp}.{body}. Utilice la opción «Empezar desde un proveedor» para copiar un formato similar y modifique únicamente lo que difiera.

Dónde se coloca la firma

  • Sin formato: el valor del encabezado es la firma, opcionalmente seguida de un prefijo que usted elija, como sha256= o v1,.
  • Clave = valor: el encabezado contiene pares del tipo t=1700000000,v1=abc.... Indique el nombre de la clave que contiene la firma (v1), opcionalmente el de la clave que contiene la marca de tiempo (t), y si los pares van separados por , o ;.

Si un encabezado contiene varias firmas separadas por espacios - algo que hacen algunos remitentes cuando se renueva un secreto - , se acepta cualquiera de ellas que coincida.

El secreto

Por lo general, debe pegar el secreto tal y como lo muestra el remitente. Algunos remitentes proporcionan una clave codificada en Base64 con un prefijo, como whsec_...: seleccione la opción «codificada en Base64» e introduzca el prefijo que desea eliminar.

Pruebas antes de la puesta en marcha

El comprobador de firmas se encuentra debajo de los ajustes y funciona con los cambios no guardados.

  • Pegue el cuerpo y los encabezados de una solicitud real y pulse «Verificar». Se le mostrarán todos los pasos - encabezado encontrado, firma leída, marca de tiempo dentro del rango, payload generado, firmas comparadas - y el texto exacto que se ha firmado, de modo que, en caso de discrepancia, se le indicará dónde se ha producido el error, en lugar de mostrarse simplemente un «firma no válida».
  • Al generar un ejemplo válido, se obtienen encabezados firmados correctamente y un archivo curl listo para ejecutarse con su configuración actual. Si se acepta dicha solicitud, su configuración es coherente de principio a fin.

El probador nunca inicia un flujo de trabajo, no registra nada en el historial y no se contabiliza en su plan.

La firma no coincide. ¿Qué debería comprobar?▾

En este pedido: el secreto (la causa más habitual, como un espacio de más o una clave de entorno incorrecta), la payload firmada (la ausencia de . o : entre la marca de tiempo y el cuerpo), la codificación (hexadecimal frente a base64) y si algo entre el remitente y la aplicación ha modificado el cuerpo. Las firmas abarcan los bytes sin procesar, por lo que un proxy que reformatee el JSON las invalida.

Las solicitudes fallan con el mensaje «marca de tiempo fuera de los límites de tolerancia»▾

El reloj del remitente no está sincronizado, la solicitud se retrasó o se volvió a intentar con una marca de tiempo obsoleta, o bien la unidad de la marca de tiempo es incorrecta. Compruebe si su remitente utiliza segundos, milisegundos o una fecha ISO.

Mi remitente necesita primero un proceso de verificación▾

Algunos servicios (Zoom, Dropbox, Asana, Trello, Notion) envían una solicitud de verificación a la que el punto final debe responder antes de que estos servicios transmitan cualquier evento, cada uno a su manera. Por este motivo, no se ofrecen como proveedores de configuración con un solo clic. Póngase en contacto con el soporte indicando el nombre de su remitente si necesita utilizar alguno de ellos.

¿Se guarda la firma en algún sitio?▾

No. Los encabezados de firma se ocultan en el Historial y en el Inspector de solicitudes en tiempo real, ya que una firma puede reproducirse dentro de su ventana de tolerancia.