ユーザの応答を検証する



  • この記事は、reCAPTCHAに関する記事を和訳したものです。
  • 原文: Verifying the user's response
  • 元記事のライセンスは CC-BYで、この和訳記事のライセンスは CC-BYです。
  • 自己責任でご利用ください。
  • 和訳した時期は 2019年6月ころです。

このページでは、あなたのアプリケーションのバックエンドからの reCAPTCHAチャレンジに対するユーザの応答を検証する方法について説明します。

ウェブユーザの場合には、次の 3つの方法のいずれかで、ユーザの応答トークンを取得することができます:

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

Androidライブラリのユーザの場合には、ステータスが正常を戻した場合、応答トークンを取得するために SafetyNetApi.RecaptchaTokenResult.getTokenResult()メソッドを呼び出すことができます。

トークンの制限

それぞれの reCAPTCHAユーザ応答トークンは 2分間有効であり、リプレイ攻撃を防ぐために、一度だけ検証されることができます。 もし新しいトークンが必要ならば、reCAPTCHA認証を再実行することができます。

応答トークンを取得した後、トークンが有効であることを保証するために、次の APIを使用して、reCAPTCHAを用いて、2分以内に、それを検証する必要があります。

APIリクエスト

URL: https://www.google.com/recaptcha/api/siteverify

METHOD: 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 応答はもう有効ではありません: 古すぎるか、あるいは、以前に使用されたことがあります。