Gecertificeerde webhooks verifiëren

Veel diensten voorzien de webhooks die zij verzenden van een handtekening, zodat de ontvanger kan vaststellen dat een verzoek daadwerkelijk van hen afkomstig is en onderweg niet is gewijzigd. Stel de authenticatie van een webhook in op HMAC, waarna de app die handtekening controleert voordat er iets Shopify Flow bereikt. Een verzoek dat deze controle niet doorstaat, wordt afgewezen met de foutmelding 401 en er wordt nooit een workflow uitgevoerd.

Er zijn twee manieren om dit in te stellen: kies de afzender uit de lijst, of geef aan hoe deze ondertekent.

Ingebouwde providers

Kies de provider onder ‘Signature provider’ en plak de ondertekeningssleutel ervan. De app controleert vervolgens of de provider aan de vereisten voldoet - de juiste header, codering, ondertekende inhoud en replay-venster - zodat u verder niets meer hoeft te configureren. Elke provider beschikt over een eigen installatiehandleiding, van het aanmaken van het eindpunt tot het opzetten van de Shopify Flow-workflow.

Aanbieder Installatiehandleiding Behandelt tevens
Calendly Hoe kunt u Calendly koppelen aan Shopify Flow -
Customer.io Hoe u Customer.io kunt koppelen aan Shopify Flow -
GitHub Hoe koppelt u GitHub aan Shopify Flow? -
Lemon Squeezy Hoe sluit u de Lemon Squeezy aan op Shopify Flow -
Lineair Hoe koppelt u Linear aan Shopify Flow -
Mollie Hoe koppelt u Mollie aan Shopify Flow -
Peddel Hoe u Paddle kunt koppelen aan Shopify Flow -
Paystack Hoe u Paystack kunt koppelen aan Shopify Flow -
Razorpay Hoe u Razorpay kunt koppelen aan Shopify Flow -
Gezond verstand Hoe koppelt u Sanity aan Shopify Flow? -
Sendcloud Hoe koppelt u Sendcloud aan Shopify Flow? -
Sentry Hoe u Sentry kunt koppelen aan Shopify Flow -
Shopify Hoe kunt u Shopify koppelen aan Shopify Flow -
Slack Hoe u Slack kunt koppelen aan Shopify Flow -
Vierkant Hoe u Square kunt koppelen aan Shopify Flow -
Standaardwebhooks Hoe u standaardwebhooks kunt koppelen aan Shopify Flow OpenAI, Supabase-authenticatie-hooks
Streep Hoe koppelt u Stripe aan Shopify Flow -
Svix Hoe koppelt u Svix aan Shopify Flow? Administratief medewerker, Opnieuw verzenden, Superwall
Typeform Hoe u Typeform kunt koppelen aan Shopify Flow -
Vercel Hoe u Vercel kunt koppelen aan Shopify Flow -
WooCommerce Hoe u WooCommerce kunt koppelen aan Shopify Flow -
Zendesk Hoe u Zendesk kunt koppelen aan Shopify Flow -

In elke handleiding wordt precies vermeld wat de app bij die afzender controleert en waar het ondertekeningsgeheim te vinden is.

Een webhook met HMAC-authenticatie en Stripe als handtekeningprovider, waarbij het veld ‘signing secret’ wordt getoond, wat hiermee wordt gecontroleerd en de stappen voor het koppelen van Stripe
Een ondertekende afzender, in dit geval Stripe: kies de aanbieder, voer het ondertekeningsgeheim in, waarna de editor laat zien wat er is aangevinkt en hoe u de verbinding tot stand kunt brengen.

Aangepaste handtekening: elke andere afzender

Indien uw afzender niet in de lijst voorkomt, kiest u ‘Aangepaste handtekening’ en beschrijft u hoe deze wordt ondertekend. In de documentatie van uw provider staat een regel zoals:

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

Die ene regel geeft voor elk veld een antwoord:

Setting Uit het voorbeeld Wat dit betekent
Handtekeningkoptekst X-Acme-Signature De koptekst met de handtekening
Algoritme hmac_sha256 SHA-256, SHA-1 of SHA-512
Codering hex hex, base64 of base64url
Ondertekende payload {timestamp}.{body} De exacte tekst die werd ondertekend
Tijdstempel een koptekst zoals X-Acme-Timestamp Waar de waarde van timestamp naartoe gaat
Herhalingstolerantie 300 seconden Verzoeken die ouder zijn dan dit, afwijzen

De ondertekende payload

Schrijf op wat de afzender ondertekent met behulp van deze plaatshouders:

Plaatshouder Wordt
{body} De onbewerkte inhoud van het verzoek, byte voor byte. Verplicht.
{timestamp} De tijdstempel uit de header of de handtekeningheader
{url} De URL van deze webhook, zoals u deze bij de afzender hebt ingevoerd
{header:name} De waarde van een andere verzoekheader

Veelvoorkomende vormen: {body}, {timestamp}.{body}, {timestamp}{body}, v0:{timestamp}:{body}, {header:webhook-id}.{timestamp}.{body}. Gebruik de optie ‘Start bij een aanbieder’ om een sterk overeenkomende variant te kopiëren en pas alleen de verschillen aan.

Waar de handtekening staat

  • Eenvoudig gezegd: de waarde van de header is de handtekening, eventueel gevolgd door een door u gekozen voorvoegsel, zoals sha256= of v1,.
  • Sleutel = waarde: de header bevat paren zoals t=1700000000,v1=abc.... Geef de sleutel op die de handtekening bevat (v1), eventueel de sleutel die de tijdstempel bevat (t), en of de paren worden gescheiden door , of ;.

Indien een header meerdere handtekeningen bevat die door spaties van elkaar worden gescheiden - wat sommige afzenders doen wanneer u een geheim afwisselt - wordt elke handtekening die overeenkomt, geaccepteerd.

Het geheim

Meestal plakt u de geheime code precies zoals de afzender deze weergeeft. Sommige afzenders verstrekken een in Base64-code gecodeerde sleutel met een voorvoegsel, zoals whsec_...: kies dan voor ‘Base64-gecodeerd’ en voer het voorvoegsel in dat u wilt verwijderen.

Testen voordat u live gaat

De handtekeningcontrole bevindt zich onder de instellingen en werkt ook bij niet-opgeslagen wijzigingen.

  • Plak de hoofdtekst en de headers van een echt verzoek en klik op ‘Verifiëren’. U krijgt elke stap te zien - header gevonden, handtekening gelezen, tijdstempel binnen het bereik, payload samengesteld, handtekeningen vergeleken - en de exacte tekst die is ondertekend, zodat u bij een afwijking precies kunt zien waar het mis is gegaan, in plaats van alleen de melding ‘ongeldige handtekening’ te krijgen.
  • Met de optie ‘Een geldig voorbeeld genereren’ worden correct ondertekende headers en een uitvoerbare curl voor uw huidige instellingen gegenereerd. Indien dat verzoek wordt geaccepteerd, is uw configuratie van begin tot eind consistent.

De tester start nooit een workflow, schrijft niets naar de geschiedenis en telt niet mee voor uw abonnement.

De handtekening komt niet overeen. Wat moet ik controleren?▾

In deze volgorde: het geheim (de meest voorkomende oorzaak, zoals een extra spatie of de verkeerde sleutel van de omgeving), de ondertekende payload (een ontbrekend . of : tussen de tijdstempel en de body), de codering (hex versus base64) en of er iets tussen de afzender en de app de body heeft gewijzigd. Handtekeningen hebben betrekking op de ruwe bytes, dus een proxy die JSON opnieuw opmaakt, maakt ze ongeldig.

Verzoeken mislukken met de foutmelding "tijdstempel buiten de tolerantie"▾

De klok van de afzender loopt niet synchroon, het verzoek is vertraagd of opnieuw verzonden met een verouderde tijdstempel, of de eenheid van de tijdstempel is onjuist. Controleer of uw afzender seconden, milliseconden of een ISO-datum gebruikt.

Mijn afzender heeft eerst een verificatieprocedure nodig▾

Sommige diensten (Zoom, Dropbox, Asana, Trello, Notion) sturen een verificatieverzoek waarop het eindpunt moet reageren voordat zij gebeurtenissen doorgeven, elk op hun eigen manier. Om die reden worden zij niet aangeboden als ‘één-klik’-providers. Neem contact op met de support en vermeld de naam van uw afzender als u een van deze diensten nodig hebt.

Wordt de handtekening ergens opgeslagen?▾

Nee. Handtekeningkopteksten worden in de Geschiedenis en in de Live Request Inspector verborgen, omdat een handtekening binnen het tolerantievenster kan worden herhaald.