Stripe Webhook 署名検証は ComputeSignature で本物の署名を生成してユニットテストする
Go
テスト
セキュリティ
Stripe
Stripe の Webhook 署名検証(webhook.ConstructEvent 系)は、検証ロジックをモックせずに本物の署名を生成してテストできる。stripe-go は署名計算関数 webhook.ComputeSignature(timestamp, payload, secret) を公開しており、Stripe が送る Stripe-Signature ヘッダー形式(t=<unix秒>,v1=<hex(HMAC-SHA256)>)を自前で組み立てられる。
最低限入れるべきテストケース:
- 正しい署名 → イベントが返る
- 別のシークレットで署名 → 拒否
- 署名後にペイロードを改ざん → 拒否
- 古いタイムスタンプ(デフォルト許容は5分)→ 拒否
- ヘッダー形式が不正 → 拒否
理由: Webhook 署名検証は決済の入口であり、モックで素通しにすると「検証を外しても全テストが通る」状態になる。実署名でテストすれば、API バージョン互換オプション(IgnoreAPIVersionMismatch 等)の挙動変更や、シークレットの取り違えをテストで検出できる。ネットワーク不要・外部依存なしで実行できるため CI コストもかからない。
応用: HMAC 署名方式の Webhook(GitHub、Slack 等)全般に同じパターンが使える。署名関数が公開されていない場合も、仕様どおり HMAC を自前計算すれば同様にテストできる。