CrewGear
ログインはじめる
ドキュメント

署名

CrewGear からの送信であることを確かめるための署名の作り方と、検証の手順です。

署名の作り方

  • t は送信した時刻の UNIX 秒です。
  • 署名する文字列は、t と本文の生の文字列を . でつないだ `${t}.${本文}` です。
  • sig は、シークレットキーを鍵とした HMAC-SHA256 の値を、16進の小文字で表したものです。
  • ヘッダーの X-Webhook-Signature: t=<t>,v1=<sig> と、クエリの webhook_t=<t> と webhook_sig=<sig> に、同じ値を載せます。ヘッダーを読めない受信環境でも、クエリで検証できます。

シークレットキーそのものは送りません。

検証の手順

  1. ヘッダーから t と sig を取り出します。ヘッダーを読めないときはクエリから取り出します。
  2. t と受け取った時刻の差が、許容する範囲を超えていたら拒否します。
  3. 受け取った本文を、JSON として解釈する前の生の文字列のまま使って `${t}.${本文}` を作り、シークレットキーで HMAC-SHA256 を計算します。
  4. 計算した値と sig を、比べる時間が値によって変わらない方法で照合し、一致しなければ拒否します。
  5. 同じ id をすでに処理していたら、無視します。まれに同じ変更が重ねて届くことがあるためです。

このページの内容