ユーザーの回答を確認する

このページでは、アプリケーションのバックエンドから reCAPTCHA チャレンジに対するユーザーのレスポンスを確認する方法について説明します。

ウェブユーザーの場合、次の 3 つの方法のいずれかでユーザーの応答トークンを取得できます。

  • g-recaptcha-response POST パラメータ(ユーザーがサイトでフォームを送信したとき)
  • ユーザーが reCAPTCHA の確認を完了した後の grecaptcha.getResponse(opt_widget_id)
  • コールバック関数の文字列引数(g-recaptcha タグ属性または grecaptcha.render メソッドのコールバック パラメータで data-callback が指定されている場合)

Android ライブラリのユーザーは、ステータスが成功を返した場合に SafetyNetApi.RecaptchaTokenResult.getTokenResult() メソッドを呼び出して、レスポンス トークンを取得できます。

トークンの制限

各 reCAPTCHA ユーザー レスポンス トークンは 2 分間有効で、リプレイ攻撃を防ぐために検証できるのは 1 回だけです。新しいトークンが必要な場合は、reCAPTCHA による検証を再実行できます。

レスポンス トークンを取得したら、次の API を使用して reCAPTCHA で 2 分以内に検証し、トークンが有効であることを確認する必要があります。

API リクエスト

URL: https://www.google.com/recaptcha/api/siteverify メソッド: POST

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

API レスポンス

レスポンスは JSON オブジェクトです。

{
  "success": true|false,
  "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
}

reCAPTCHA Android の場合:

{
  "success": true|false,
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "apk_package_name": string, // the package name of the app where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}

エラーコードの参照

エラーコード 説明
missing-input-secret シークレット パラメータが指定されていません。
invalid-input-secret シークレット パラメータが無効であるか、不正な形式です。
missing-input-response レスポンス パラメータがありません。
invalid-input-response レスポンス パラメータが無効であるか、不正な形式です。
bad-request リクエストが無効であるか、形式が正しくありません。
timeout-or-duplicate 応答は無効になりました。古すぎるか、以前に使用されたことがあります。