このページでは、アプリケーションのバックエンドから送られた reCAPTCHA チャレンジに対するユーザーのレスポンスを検証する方法について説明します。
ウェブユーザーの場合、ユーザーのレスポンス トークンを次の 3 つの方法のいずれかで取得できます。
- ユーザーがサイトでフォームを送信するときの g-recaptcha-responsePOST パラメータ
- ユーザーが reCAPTCHA チャレンジを完了した後の grecaptcha.getResponse(opt_widget_id)
- data-callbackが- g-recaptchaタグ属性または- grecaptcha.renderメソッドのコールバック パラメータで指定されている場合、コールバック関数の文字列引数として。
Android ライブラリを使用している場合は、ステータスが成功を返した場合に SafetyNetApi.RecaptchaTokenResult.getTokenResult() メソッドを呼び出してレスポンス トークンを取得できます。
トークンの制限
各 reCAPTCHA ユーザー レスポンス トークンは 2 分間有効で、リプレイ攻撃を防ぐため1 回しか検証できません。新しいトークンが必要な場合は、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 | secret パラメータが指定されていません。 | 
| invalid-input-secret | シークレット パラメータが無効であるか、不正な形式です。 | 
| missing-input-response | レスポンス パラメータがありません。 | 
| invalid-input-response | レスポンス パラメータが無効であるか、不正な形式です。 | 
| bad-request | リクエストが無効であるか、形式が正しくありません。 | 
| timeout-or-duplicate | レスポンスが有効でなくなった(古すぎるか、以前に使用された)。 | 
