İmzalı webhook'ların doğrulanması

İmzalı webhook'ların doğrulanması

Sayfayı kopyala

Workflow Webhooks, Shopify Flow çalışmadan önce webhook HMAC imzasını doğrular: 22 yerleşik sağlayıcı ve diğer hizmetler için özel imza desteği.

Birçok hizmet, gönderdiği webhook’ları imzalar; böylece alıcı, bir isteğin gerçekten kendilerinden geldiğini ve yol boyunca değiştirilmediğini doğrulayabilir. Bir webhook’un kimlik doğrulama yöntemini HMAC olarak ayarladığınızda, uygulama, herhangi bir veri Shopify Flow’a ulaşmadan önce bu imzayı kontrol eder. Kontrolden geçemeyen bir istek, 401 hatasıyla reddedilir ve iş akışı asla çalıştırılmaz.

Bunu ayarlamanın iki yolu vardır: listeden göndereni seçin ya da nasıl imzaladığını açıklayın.

Yerleşik sağlayıcılar

İmza sağlayıcısı bölümünden sağlayıcıyı seçin ve imza gizli anahtarını yapıştırın. Uygulama daha sonra bu sağlayıcının belgeleri düzenleme biçimini (doğru başlık, kodlama, imzalanmış içerik ve tekrar oynatma aralığı) doğrular; dolayısıyla yapılandırmanız gereken başka bir şey yoktur. Her sağlayıcının, uç noktanın oluşturulmasından Shopify Flow iş akışının oluşturulmasına kadar kendi kurulum kılavuzu mevcuttur.

Sağlayıcı Kurulum kılavuzu Ayrıca şunları da kapsar
Calendly Calendly'yi Shopify Flow'a nasıl bağlayabilirim? -
Customer.io Customer.io'yu Shopify Flow'a nasıl bağlayabilirim? -
GitHub GitHub'ı Shopify Flow'a nasıl bağlayabilirim? -
Limon Sıkacağı Lemon Squeezy'yi Shopify Flow'a nasıl bağlayabilirim? -
Doğrusal Linear'ı Shopify Flow'a nasıl bağlayabilirim? -
Mollie Mollie'yi Shopify Flow'a nasıl bağlayabilirim? -
Kürek Paddle'ı Shopify Flow'a nasıl bağlayabilirim? -
Paystack Paystack'i Shopify Flow'a nasıl bağlayabilirsiniz? -
Razorpay Razorpay'i Shopify Flow'a nasıl bağlayabilirim? -
Akıl sağlığı Sanity'yi Shopify Flow'a nasıl bağlayabilirim? -
Sendcloud Sendcloud'u Shopify Flow'a nasıl bağlayabilirsiniz? -
Sentry Sentry'yi Shopify Flow'a nasıl bağlayabilirsiniz? -
Shopify Shopify'u Shopify Flow'a nasıl bağlayabilirim? -
Slack Slack'i Shopify Flow'a nasıl bağlayabilirsiniz? -
Kare Square'i Shopify Flow'a nasıl bağlayabilirim? -
Standart Webhook'lar Standart Webhook’ları Shopify Flow’a nasıl bağlayabilirsiniz? OpenAI, Supabase Kimlik Doğrulama Kancaları
Çizgi Stripe'ı Shopify Flow'a nasıl bağlayabilirim? -
Svix Svix'i Shopify Flow'a nasıl bağlayabilirim? Memur, Yeniden Gönder, Süper Duvar
Typeform Typeform'u Shopify Flow'a nasıl bağlayabilirim? -
Vercel Vercel'i Shopify Flow'a nasıl bağlayabilirim? -
WooCommerce WooCommerce'i Shopify Flow'a nasıl bağlayabilirim? -
Zendesk Zendesk'i Shopify Flow'a nasıl bağlayabilirim? -

Her kılavuzda, uygulamanın o gönderenle ilgili tam olarak neleri kontrol ettiği ve imzalamaya yönelik gizli anahtarının nerede bulunabileceği ayrıntılı olarak belirtilmiştir.

HMAC kimlik doğrulamasına sahip ve imza sağlayıcısı olarak Stripe’ı kullanan bir webhook; burada “imza gizli anahtarı” alanı, bu alanın neyi kontrol ettiği ve Stripe’a bağlanma adımları gösterilmektedir
İmzalı gönderen (burada Stripe): sağlayıcıyı seçin, imza gizli anahtarını yapıştırın; düzenleyici, hangi alanların işaretli olduğunu ve nasıl bağlanacağını gösterir.

Özel imza: diğer tüm gönderenler

Göndereniniz listede yoksa, Özel imza seçeneğini seçin ve nasıl imzalandığını açıklayın. Servis sağlayıcınızın belgelerinde şuna benzer bir satır yer alacaktır:

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

Bu tek satır, tüm alanlara yanıt veriyor:

Ayarlar Örnekten Bunun anlamı nedir?
İmza başlığı X-Acme-Signature İmzayı taşıyan başlık
Algoritma hmac_sha256 SHA-256, SHA-1 veya SHA-512
Kodlama hex hex, base64 veya base64url
İmzalı veri yükü {timestamp}.{body} İmzalanan metnin tam metni
Zaman damgası X-Acme-Timestamp gibi bir başlık timestamp değerinin gittiği yer
Tekrar oynatma toleransı 300 saniye Bundan daha eski talepleri reddet

İmzalanmış yük

Göndericinin imzaladığı kısmı şu yer tutucuları kullanarak yazın:

Yer tutucu Şu hale gelir
{body} İşlenmemiş istek gövdesi, bayt bayt. Zorunludur.
{timestamp} Başlıktaki veya imza başlığındaki zaman damgası
{url} Bu webhook’un URL’si, gönderen tarafında girdiğiniz şekliyle
{header:name} Başka bir istek başlığının değeri

Yaygın biçimler: {body}, {timestamp}.{body}, {timestamp}{body}, v0:{timestamp}:{body}, {header:webhook-id}.{timestamp}.{body}. Bir sağlayıcıdan başla seçeneğini kullanarak benzer bir biçimi kopyalayın ve yalnızca farklı olan kısımları değiştirin.

İmzanın bulunduğu yer

  • Basit: Başlık değeri imzadır; isteğe bağlı olarak, sha256= veya v1, gibi sizin belirlediğiniz bir önekten sonra gelir.
  • Anahtar = değer: Başlık, t=1700000000,v1=abc... gibi çiftleri içerir. İmzayı barındıran anahtarın adını (v1), isteğe bağlı olarak zaman damgasını barındıran anahtarın adını (t) ve çiftlerin , mi yoksa ; ile mi ayrılacağını belirtin.

Bir başlıkta, boşluklarla ayrılmış birden fazla imza bulunuyorsa (bazı gönderenler, gizli anahtarı değiştirirken bunu yapar), bunlardan herhangi biri eşleşirse kabul edilir.

Sır

Genellikle, gönderenin gösterdiği şekilde şifreyi yapıştırırsınız. Bazı gönderenler, whsec_... gibi bir önek içeren Base64 kodlu bir anahtar verir: Base64 kodlu seçeneğini seçin ve kaldırmak istediğiniz öneki girin.

Canlıya geçmeden önce test etme

İmza denetleyicisi, ayarların altında yer alır ve kaydedilmemiş değişikliklerle çalışır.

  • Gerçek bir isteğin gövdesini ve başlıklarını yapıştırın ve Doğrula düğmesine basın. Her adımı görebilirsiniz - başlık bulundu, imza okundu, zaman damgası aralıkta, yük oluşturuldu, imzalar karşılaştırıldı - ve imzalanmış olan metnin tam metnini de görebilirsiniz; böylece bir uyuşmazlık durumunda, sadece “geçersiz imza” gibi genel bir uyarı yerine, sorunun tam olarak nerede olduğunu görebilirsiniz.
  • Geçerli bir örnek oluştur seçeneği, mevcut ayarlarınız için doğru şekilde imzalanmış başlıklar ve çalıştırılmaya hazır bir curl komutu üretir. Bu istek kabul edilirse, yapılandırmanız uçtan uca tutarlı demektir.

Test kullanıcısı hiçbir zaman bir iş akışını başlatmaz, Geçmiş’e hiçbir şey kaydetmez ve planınızın kotasından düşülmez.

İmza uyuşmuyor. Nereye bakmalıyım?

Şu sırayla: şifre (en yaygın neden; fazladan bir boşluk veya yanlış ortam anahtarı dahil), **imzalı **veri yükü (zaman damgası ile gövde arasında eksik bir . veya :), kodlama (hex ve base64), ve gönderen ile uygulama arasında bir şeyin gövdeyi değiştirip değiştirmediği. İmzalar ham baytları kapsar, bu nedenle JSON'u yeniden biçimlendiren bir proxy, imzaları bozar.

İstekler, "zaman damgası tolerans aralığı dışında" hatasıyla başarısız oluyor

Göndericinin saati yanlış ayarlanmış, istek gecikmiş ya da eski bir zaman damgasıyla yeniden denenmiş ya da zaman damgası birimi yanlış. Göndericinizin saniye, milisaniye mi yoksa ISO tarihi mi kullandığını kontrol edin.

Göndericimin önce bir doğrulama el sıkışması yapması gerekiyor

Bazı hizmetler (Zoom, Dropbox, Asana, Trello, Notion), herhangi bir olay iletmeden önce uç noktanın yanıtlaması gereken bir doğrulama talebi gönderir; her biri bunu kendine özgü bir şekilde yapar. Bu nedenle, bu hizmetler tek tıklamayla kullanılabilen sağlayıcılar olarak sunulmamaktadır. Bu hizmetlerden birine ihtiyacınız varsa, gönderen adınızı belirterek destek ekibiyle iletişime geçin.

İmza herhangi bir yerde saklanıyor mu?

Hayır. İmza başlıkları, Geçmiş bölümünde ve Canlı İstek Denetleyicisi’nde gizlenir; çünkü bir imza, tolerans aralığı içinde yeniden oynatılabilir.