Webフックは、外部サービスが自分のサーバーへイベントを送る仕組みです。ところが誰でもそのURLへリクエストを送れるため、受け取ったリクエストが本当にそのサービスから来たのかを確認する必要があります。このとき使う標準的な方法がHMAC署名です。
送信側と受信側は秘密キーを共有します。送信側はリクエスト本文をキーでHMAC-SHA256ハッシュ化し、その署名をヘッダーに入れて送ります。受信側は同じキーで同じ本文をハッシュ化し、2つの署名が一致するかを比較します。
一致すれば2つのことが同時に保証されます。キーを持つ側だけが正しい署名を作れるので真正性が、本文が少しでも変わると署名が変わるので整合性が確認できます。GitHub・Stripe・Slackなど大半のWebフックがこの方式を使っています。
AG HASHで実際に検証してみることができます。HMACオプションをオンにして共有キーを入力し、リクエスト本文を貼り付けるとHMAC-SHA256値が出ます。これをリクエストヘッダーの署名と比較すればよいのです。実際の検証では、タイミング攻撃を避ける定数時間比較を推奨します。