Verificação de webhooks assinados

Muitos serviços assinam os webhooks que enviam, para que o destinatário possa comprovar que um pedido provém efetivamente deles e não foi alterado durante o percurso. Defina a autenticação de um webhook como HMAC e a aplicação verificará essa assinatura antes de qualquer coisa chegar a Shopify Flow. Um pedido que não passe na verificação é rejeitado com o erro 401 e nunca executa um fluxo de trabalho.

Existem duas formas de configurar isto: selecione o remetente da lista ou descreva a forma como este assina.

Provedores integrados

Selecione o fornecedor na secção «Fornecedor de assinatura» e cole o seu segredo de assinatura. A aplicação verifica então a forma como esse fornecedor documenta os dados - o cabeçalho correto, a codificação, o conteúdo assinado e a janela de repetição - pelo que não há mais nada a configurar. Cada fornecedor dispõe do seu próprio guia de configuração, desde a criação do ponto de extremidade até à construção do fluxo de trabalho Shopify Flow.

Prestador Guia de configuração Abrange também
Calendly Como ligar o Calendly ao Shopify Flow -
Customer.io Como ligar o Customer.io ao Shopify Flow -
GitHub Como ligar o GitHub a umShopify Flow -
Espremedor de Limão Como ligar o Lemon Squeezy a umShopify Flow -
Linear Como ligar o Linear a umShopify Flow -
Mollie Como ligar a Mollie a umShopify Flow -
Raquete Como ligar o Paddle a umShopify Flow -
Paystack Como ligar o Paystack ao Shopify Flow -
Razorpay Como ligar o Razorpay ao Shopify Flow -
Saneamento mental Como ligar o Sanity ao Shopify Flow -
Sendcloud Como ligar o Sendcloud ao Shopify Flow -
Sentry Como ligar o Sentry ao Shopify Flow -
Shopify Como ligar Shopify a Shopify Flow -
Slack Como ligar o Slack ao Shopify Flow -
Quadrado Como ligar o Square ao Shopify Flow -
Webhooks padrão Como ligar os Webhooks padrão ao Shopify Flow OpenAI, Hooks de autenticação do Supabase
Stripe Como ligar o Stripe ao Shopify Flow -
Svix Como ligar o Svix a umShopify Flow Clerk, Resend, Superwall
Typeform Como ligar o Typeform ao Shopify Flow -
Vercel Como ligar o Vercel a umShopify Flow -
WooCommerce Como ligar o WooCommerce ao Shopify Flow -
Zendesk Como ligar o Zendesk aoShopify Flow -

Cada guia indica exatamente o que a aplicação verifica relativamente a esse remetente e onde encontrar o seu segredo de assinatura.

A webhook com autenticação HMAC e o Stripe como fornecedor de assinatura, apresentando o campo «segredo de assinatura», o que este verifica e os passos para ligar o Stripe
Um remetente assinado, neste caso o Stripe: selecione o fornecedor, cole o seu segredo de assinatura e o editor mostra o que está marcado e como estabelecer a ligação.

Assinatura personalizada: qualquer outro remetente

Se o seu remetente não constar da lista, selecione «Assinatura personalizada» e descreva como é que este assina. A documentação do seu fornecedor conterá uma linha do tipo:

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

Essa única linha preenche todos os campos:

Contexto A partir do exemplo O que isso significa
Cabeçalho da assinatura X-Acme-Signature O cabeçalho que contém a assinatura
Algoritmo hmac_sha256 SHA-256, SHA-1 ou SHA-512
Codificação hex hex, base64 ou base64url
Payload assinado {timestamp}.{body} O texto exato que foi assinado
Data e hora um cabeçalho como X-Acme-Timestamp Para onde se desloca o valor de timestamp
Tolerância de repetição 300 segundos Rejeitar os pedidos mais antigos do que este

The signed payload

Escreva o que o remetente assina utilizando estes espaços reservados:

Espaço reservado Torna-se
{body} O corpo da solicitação em formato bruto, byte a byte. Obrigatório.
{timestamp} O carimbo temporal do cabeçalho ou do cabeçalho da assinatura
{url} O URL deste webhook, tal como o introduziu no remetente
{header:name} O valor de outro cabeçalho de pedido

Formatos comuns: {body}, {timestamp}.{body}, {timestamp}{body}, v0:{timestamp}:{body}, {header:webhook-id}.{timestamp}.{body}. Utilize a opção «Começar a partir de um fornecedor» para copiar um formato semelhante e altere apenas o que difere.

Onde se encontra a assinatura

  • Simples: o valor do cabeçalho é a assinatura, opcionalmente seguida de um prefixo que definir, tal como sha256= ou v1,.
  • Chave = valor: o cabeçalho contém pares como t=1700000000,v1=abc.... Indique a chave que contém a assinatura (v1), opcionalmente a chave que contém o carimbo temporal (t), e se os pares são separados por , ou ;.

Se um cabeçalho contiver várias assinaturas separadas por espaços - o que acontece com alguns remetentes quando se altera um segredo - , qualquer uma que corresponda é aceite.

O segredo

Normalmente, deve colar o segredo tal como o remetente o apresenta. Alguns remetentes fornecem uma chave codificada em Base64 com um prefixo, como whsec_...: selecione a opção «codificada em Base64» e introduza o prefixo a remover.

Testes antes da entrada em funcionamento

O verificador de assinatura encontra-se abaixo das definições e funciona com alterações não guardadas.

  • Cole o corpo e os cabeçalhos de um pedido real e clique em «Verificar». Obterá cada etapa - cabeçalho encontrado, assinatura lida, carimbo temporal dentro do intervalo, payload criado, assinaturas comparadas - e o texto exato que foi assinado; assim, uma discrepância indica-lhe onde ocorreu o erro, em vez de se limitar a uma simples mensagem do tipo «assinatura inválida».
  • A função «Gerar um exemplo válido» produz cabeçalhos devidamente assinados e um ficheiro curl pronto a ser executado, de acordo com as suas definições atuais. Se esse pedido for aceite, a sua configuração é consistente de ponta a ponta.

O testador nunca inicia um fluxo de trabalho, não regista nada no Histórico e não é contabilizado no seu plano.

A assinatura não corresponde. O que devo verificar?▾

Por este pedido: o segredo (a causa mais comum, incluindo um espaço extra ou a chave do ambiente errado), a carga útil assinada (a ausência de . ou : entre o carimbo de data/hora e o corpo), a codificação (hex vs. base64) e se algo entre o remetente e a aplicação alterou o corpo. As assinaturas abrangem os bytes em bruto, pelo que um proxy que reformate o JSON as invalida.

Os pedidos falham com a mensagem «carimbo temporal fora da tolerância»▾

O relógio do remetente está desajustado, o pedido foi atrasado ou repetido com um carimbo temporal antigo, ou a unidade do carimbo temporal está errada. Verifique se o seu remetente utiliza segundos, milissegundos ou uma data ISO.

O meu remetente necessita, em primeiro lugar, de um processo de verificação▾

Alguns serviços (Zoom, Dropbox, Asana, Trello, Notion) enviam um desafio de verificação ao qual o ponto final tem de responder antes de estes transmitirem quaisquer eventos, cada um à sua maneira. Por esse motivo, não são disponibilizados como prestadores de serviço com um único clique. Contacte o suporte indicando o nome do seu remetente, caso necessite de um desses serviços.

A assinatura está guardada em alguma loja?▾

Não. Os cabeçalhos das assinaturas são ocultados no Histórico e no Inspecionador de Pedidos em Tempo Real, uma vez que uma assinatura pode ser reproduzida dentro da sua janela de tolerância.