Skip to main content
連携においてHubSpotから受け取るリクエストが実際にHubSpotから送信されたことを確かめるために、いくつかのヘッダーがリクエストに入力されます。これらのヘッダーと一緒に受信リクエストのフィールドを使用して、リクエストの署名を確認することができます。 署名の確認方法は署名のバージョンによって異なります。
  • HubSpot署名の最新バージョンを使用したリクエストを検証するには、X-HubSpot-Signature-V3ヘッダーを使用し、v3バージョンの署名を検証するための関連手順に従います。
  • 後方互換性を維持するために、HubSpotからのリクエストには旧バージョンの署名も含まれています。旧バージョンの署名を検証するには、X-HubSpot-Signature-Versionヘッダーをチェックしてから、バージョンがv1v2のどちらであるかに基づいて、以下の関連手順に従います。
以下の方法で、アプリのクライアントシークレットからのハッシュ値と受信リクエストのフィールドを抽出することができます。ハッシュ値を計算したら、その値を署名と比較します。両者が等しい場合は、リクエストは検証に合格したことになります。そうでない場合は、リクエストが転送中に改ざんされたか、あるいは他の誰かがエンドポイント宛ての偽装のリクエストを送信している可能性があります。

V1リクエスト署名を使用したリクエストの検証

アプリがWebhooks API経由でCRMオブジェクトイベントに登録されている場合は、X-HubSpot-Signature-Versionヘッダーがv1に設定されたリクエストがHubSpotから送信されます。X-HubSpot-Signatureヘッダーは、貴社のアプリのクライアントシークレットとリクエスト詳細の組み合わせに基づくSHA-256ハッシュになっています。 この署名のバージョンを確認するには、以下の手順に従います。
  • 次のように連結した文字列を作成します:Client secret + request body(存在する場合)。
  • 連結した文字列のSHA-256ハッシュを生成します。
  • ハッシュ値とX-HubSpot-Signatureヘッダーの値を比較します。
    • 同一の場合、このリクエストが検証に合格したことになります。
    • これらの値が一致しない場合、転送中にリクエストが改ざんされたか、誰かがHubSpotになりすまして貴社のエンドポイントにリクエストを送信していると考えられます。
リクエスト本文の例:

v1のリクエスト署名の例:

Pythonの例

Ruby の例

Node.jsの例

Javaの例

この場合は以下のハッシュ値が得られます。232db2615f3d666fe21a8ec971ac7b5402d33b9a925784df3ca654d05f4817de

V2リクエスト署名を使用したリクエストの検証

アプリがワークフロー内のWebhookアクションからのデータを処理している場合、またはカスタムCRMカード用のデータを返している場合は、X-HubSpot-Signature-Versionヘッダーがv2に設定されたリクエストがHubSpotから送信されます。X-HubSpot-Signatureヘッダーは、貴社のアプリのクライアントシークレットとリクエスト詳細の組み合わせに基づくSHA-256ハッシュになっています。 この署名を検証するには、次の手順に従います。
  • 次のように連結した文字列を作成します:Client secret + http method + URI + request body(存在する場合)。
  • 連結した文字列のSHA-256ハッシュを生成します。
  • ハッシュ値を署名と比較します。
    • 同一の場合、このリクエストが検証に合格したことになります。
    • これらの値が一致しない場合、転送中にリクエストが改ざんされたか、誰かがHubSpotになりすまして貴社のエンドポイントにリクエストを送信していると考えられます。
メモ:
  • ソース文字列の作成に使用するURIは、(プロトコルを含めて)元のリクエストと完全に一致する必要があります。署名の検証に問題がある場合は、クエリーパラメーターが元のリクエストに記載した順序と同じになっていることを確かめてください。
  • ソース文字列は、SHA-256ハッシュ値の計算前にUTF-8にエンコードしておく必要があります。

GETリクエストの例

GETリクエストでは、アプリのクライアントシークレットと、リクエストのメタデータの特定のフィールドが必要です。これらのフィールドとプレースホルダー値を以下に示します。
  • クライアントシークレット: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
  • HTTPメソッド: GET
  • URI: https://www.example.com/webhook_uri
  • リクエスト本文:""
連結された文字列は次のようになります。yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyyGEThttps://www.example.com/webhook_uri 上記の連結文字列のSHA-256ハッシュを計算することで生成される、ヘッダーの署名と照合する署名は次のようになります。eee2dddcc73c94d699f5e395f4b9d454a069a6855fbfa152e91e88823087200e

POSTリクエストの例

POSTリクエストでは、アプリのクライアントシークレット、リクエストのメタデータの特定のフィールド、リクエスト本文の文字列表現(例:Node.jsサービスではJSON.stringify(request.body)を使用)が必要です。これらのフィールドとプレースホルダー値を以下に示します。
  • クライアントシークレット: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
  • HTTPメソッド: POST
  • URI: https://www.example.com/webhook_uri
  • リクエスト本文: {"example_field":"example_value"}
連結された文字列は次のようになります。yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyyPOSThttps://www.example.com/webhook_uri{"example_field":"example_value"} 上記の連結文字列のSHA-256ハッシュを計算することで生成される、ヘッダーの署名と照合する署名は次のようになります。9569219f8ba981ffa6f6f16aa0f48637d35d728c7e4d93d0d52efaa512af7900 署名の[SHAハッシュ値]を計算したら、その結果として得られる署名を、リクエストのx-hubspot-signatureヘッダーで提供される署名と比較できます。 以下のコードスニペットは、GETリクエストを処理するExpressサーバーを実行している場合に、v2リクエストの検証を組み込む方法について詳しく説明しています。以下のコードブロックは一例であり、Expressサービスの全機能を実行するために必要な特定の依存関係が省略されていることに注意してください。特定のサービスにリクエストの検証を実装するときには、最新の安定した安全なライブラリーを実行していることを確認してください。

v2のリクエスト署名の例

Node.jsの例

Javaの例

V3のリクエスト署名の検証

X-HubSpot-Signature-v3ヘッダーは、貴社のアプリのクライアントシークレットとリクエスト詳細の組み合わせに基づくHMAC SHA-256ハッシュになっています。また、X-HubSpot-Request-Timestampヘッダーも含まれます。 以下の手順に従って、X-HubSpot-Signature-v3ヘッダーを使用してリクエストを検証します。
  • タイムスタンプが5分前よりも古い場合には、リクエストを拒否します。
  • リクエストURIで、下表に示すURLエンコード文字のいずれかをデコードします。クエリー文字列の先頭を示す疑問符をデコードする必要はありません。
  • 次のように連結したUTF-8でエンコードされた文字列を作成します:requestMethod + requestUri + requestBody +タイムスタンプ。タイムスタンプは、X-HubSpot-Request-Timestampヘッダーで提供されます。
  • アプリシークレットをHMAC SHA-256関数のシークレットとして使用し、連結した文字列のHMAC SHA-256ハッシュを作成します。
  • HMAC関数の結果をBase64エンコードします。
  • ハッシュ値を署名と比較します。同一の場合、このリクエストの発信元がHubSpotであることが検証されたことになります。タイミング攻撃を防ぐために、一定時間の文字列比較を使用することをお勧めします。
以下のセクションにあるコードスニペットは、受信リクエストを処理するバックエンドサービスを実行している場合に、POSTリクエストにv3リクエスト検証を組み込む方法を詳しく説明しています。以下のコードブロックは、フル機能のバックエンドサービスを実行するために必要な特定の依存関係を省略している点に留意してください。特定のサービスにリクエストの検証を実装するときには、最新の安定した安全なライブラリーを実行していることを確認してください。

v3のリクエスト署名の例:

Node.jsの例

Javaの例

最終更新日 2026年2月10日