ForHosting KIT · 開発者向けツール

WebhookのHMAC署名を検証する手順

Webhook署名の検証は、フレームワークによる本文の変更、緩すぎるヘッダー解析、通常の文字列比較による時間情報の漏えいなど、境界部分で失敗しがちです。この機能は、提供元のHMACアルゴリズムとヘッダー名を、正確で順序立った確認リストに変換します。ペイロード、秘密鍵、署名は不要です。実装や監査に結果を利用し、時刻形式、符号化、再送許容範囲は公式資料でご確認ください。

● Beta無料・ブラウザ内で実行
ご利用方法 ウェブAPIメールTelegramアプリ 近日

提供元が署名したバイト列から始めます

解析前の受信バイト列をそのまま保持してください。JSONの再シリアル化は空白、順序、エスケープ、Unicode、改行を変える場合があります。指定ヘッダー名の大文字小文字は区別せず、値は厳格に検証します。提供元の文法に従い、欠落、空値、予期しない重複、不正形式を拒否し、秘密鍵は保護された管理領域に保存してください。

正しい順序で再構成、計算、比較します

署名対象を正確に再構成してください。生の本文だけの場合も、時刻、区切り、本文の場合もあります。規定の順序と符号化を守り、秘密鍵と正規化済みアルゴリズムでHMACを計算します。両署名を同じ長さのバイト列に復号し、定時間比較を使用してください。不正な符号化や長さの違いは検証失敗です。

暗号検証を受理条件の一部として扱います

一致するHMACは秘密鍵の保有を示しますが、メッセージの新しさや一意性までは保証しません。推奨時間枠を適用し、受理済みイベントIDを保存して処理を冪等にしてください。規定の重複期間で秘密鍵を更新します。処理前に拒否し、一般的なエラーを返し、安全な理由コードだけを記録してください。本文改変、期限切れ、不正ヘッダー、誤った秘密鍵、再送をテストします。

新しいWebhookエンドポイントを実装する

実装前にアルゴリズムとヘッダーを確認可能な手順へ変換します。

既存の連携を監査する

本文取得、HMAC計算、定時間比較、再送対策の順序をご確認いただけます。

セキュリティ試験を準備する

ヘッダー欠落、本文改変、不正署名、期限切れ、再送の異常系試験を作成します。

実際のWebhookを検証しますか?

いいえ。実装手順のみを生成し、ペイロード、秘密鍵、署名は要求しません。

対応するアルゴリズムは何ですか?

HMAC-SHA1、HMAC-SHA256、HMAC-SHA384、HMAC-SHA512です。それ以外は入力エラーになります。

生のリクエスト本文が必要なのはなぜですか?

解析と再シリアル化でバイト列が変わり、正しい署名が無効になるためです。

正しいHMACだけで再送を防げますか?

いいえ。署名時刻を検証し、提供されるイベントIDを重複排除してください。

Webhookの秘密鍵を送信しますか?

いいえ。必要なのはアルゴリズムとヘッダー名だけです。秘密鍵は保護環境に保存してください。

APIリクエストの料金はいくらですか?

1件あたり$0.002です。決定論的なブラウザー実装は秘密鍵を送信せずに動作します。

このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。

POSThttps://api.kit.forhosting.com/security/webhook-signature-verify-steps

Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。

curl -X POST https://api.kit.forhosting.com/security/webhook-signature-verify-steps \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"algorithm":"HMAC-SHA256","header_name":"X-Webhook-Signature"}'
{
  "algorithm": "HMAC-SHA256",
  "header_name": "X-Webhook-Signature"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "security.webhook_signature_verify_steps",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。

1リクエストあたり$0.002

単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。

HTTPコード意味
401unauthorizedAPIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。
402insufficient_balance残高が不足しています。チャージ後に再度お試しください。
404unknown_type指定されたタスクタイプは存在しません。タイプ名を確認してください。
429rate_limitedリクエストが多すぎます。しばらく待ってから再度お試しください。

KITの完全なドキュメントを見る →