以前の SiteVerify でユーザー応答トークンを検証する

このページでは、以前の SiteVerify API エンドポイント(https://www.google.com/recaptcha/api/siteverify)を使用して、アプリケーションのバックエンドから reCAPTCHA チャレンジに対するユーザーのレスポンスを検証する方法について説明します。このエンドポイントは、CreateAssessment を使用できない以前の統合またはサードパーティ製プラグインを維持している場合にのみ使用してください。

始める前に

SiteVerify エンドポイントを呼び出すには、キーの以前の秘密鍵が必要です。 Google Cloud コンソールでシークレット キーを見つけるには、 Google Cloud コンソールでシークレット キーを取得するをご覧ください。シークレット キーはバックエンド サーバーで安全に保管し、クライアントサイド コードで公開しないでください。

ユーザーのレスポンス トークンを取得する

以前のウェブ統合では、非エンタープライズ JavaScript API(https://www.google.com/recaptcha/api.js)が読み込まれます。この API は、grecaptcha.enterprise ではなく grecaptcha オブジェクトのメソッドを提供します。フロントエンドでユーザーのレスポンス トークンを取得するには、次のいずれかの方法を使用します。

  • ユーザーがサイトでフォームを送信する際の g-recaptcha-response POST パラメータから。
  • ユーザーが reCAPTCHA v2 のチャレンジを完了した後に grecaptcha.getResponse(opt_widget_id) を呼び出す。このメソッドは、レスポンス トークンを文字列として返します。チャレンジが完了していない場合は、空の文字列を返します。省略可能な opt_widget_id パラメータは、grecaptcha.render() によって返されるウィジェット ID を指定します。省略した場合、デフォルトは最初に作成されたウィジェットになります。
  • ユーザーがチャレンジを完了したときにコールバック関数に渡される文字列引数として(g-recaptcha HTML 要素の data-callback 属性または grecaptcha.render(container, parameters) メソッドの callback パラメータのいずれかでコールバック関数名を指定した場合)。
  • スコアベース(v3)キーの grecaptcha.execute(site_key, {action: action_name}) によって返された Promise の解決された値から。

以前の grecaptcha メソッド(render、getResponse、execute、ready、reset)と g-recaptcha タグ属性は、grecaptcha.enterprise と同じパラメータを使用します。パラメータの詳細については、reCAPTCHA の JavaScript API リファレンスをご覧ください。

更新された reCAPTCHA JavaScript API に移行するには、reCAPTCHA JavaScript API を移行するをご覧ください。

トークンの制限

各 reCAPTCHA ユーザー レスポンス トークンは 2 分間有効で、リプレイ攻撃を防ぐため、各トークンは 1 回しか検証できません。レスポンス トークンを受け取ってから 2 分以内に、reCAPTCHA で検証します。新しいトークンが必要な場合は、reCAPTCHA による確認を再実行します。

API リクエスト

次のエンドポイントとメソッドを使用してリクエストを送信します。

  • URL: https://www.google.com/recaptcha/api/siteverify(www.google.com にアクセスできない場合は https://www.recaptcha.net/recaptcha/api/siteverify。reCAPTCHA をグローバルに使用するを参照)
  • Method: POST

リクエストに次の POST パラメータを含めます。

POST パラメータ 説明
secret 必須。サイトと reCAPTCHA の間で共有される秘密鍵。
response 必須。サイトの reCAPTCHA クライアントサイド統合によって提供されるユーザー レスポンス トークン。
remoteip 省略可。ユーザーの IP アドレス。

API レスポンス

SiteVerify エンドポイントは JSON オブジェクトを返します。

ウェブ統合(スコアベースの v3、チェックボックスの v2、または非表示の v2 キー)の場合、レスポンスの形式は次のようになります。

{
  "success": true|false,      // whether this request was a valid reCAPTCHA token for your site
  "score": number,            // the score for this request (0.0 - 1.0) for score-based (v3) keys
  "action": string,           // the action name for this request (important to verify)
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "hostname": string,         // the hostname of the site where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}

エラーコードの参照

次の表に、error-codes 配列に表示される可能性のあるエラーコードを示します。

エラーコード 説明
missing-input-secret secret パラメータが指定されていません。
invalid-input-secret secret パラメータが無効であるか、不適切な形式です。
missing-input-response response パラメータが指定されていません。
invalid-input-response response パラメータが無効であるか、不適切な形式です。
bad-request リクエストが無効であるか、不適切な形式です。
timeout-or-duplicate レスポンスは期限切れか、すでに使用されているため、無効になっています。

次のステップ