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