ユーザーのレスポンスを確認する

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

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

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

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

トークンの制限

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

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

API リクエスト

URL: https://www.google.com/recaptcha/api/siteverify 方法: POST

POST パラメータ 説明
Secret 必須。サイトと reCAPTCHA の間で共有キー。
件の回答 必須。サイトに 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
}

エラーコードの参照

エラーコード 説明
見つからない場合の入力シークレット シークレット パラメータがありません。
無効な入力シークレット シークレット パラメータが無効であるか不適切な形式です。
不足している入力レスポンス レスポンス パラメータが指定されていません。
無効な入力レスポンス レスポンス パラメータが無効であるか不適切な形式です。
不正リクエスト リクエストが無効であるか不適切な形式です。
タイムアウトまたは重複 レスポンスは無効になりました。古すぎるか、すでに使用されています。