- この記事は、reCAPTCHAに関する記事を和訳したものです。
- 原文: Verifying the user's response
- 元記事のライセンスは CC-BYで、この和訳記事のライセンスは CC-BYです。
- 自己責任でご利用ください。
- 和訳した時期は 2019年6月ころです。
このページでは、あなたのアプリケーションのバックエンドからの reCAPTCHAチャレンジに対するユーザの応答を検証する方法について説明します。
ウェブユーザの場合には、次の 3つの方法のいずれかで、ユーザの応答トークンを取得することができます:
-
ユーザがあなたのサイト上のフォームを提出するときの
g-recaptcha-responsePOSTパラメータ -
ユーザが 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 | 応答はもう有効ではありません: 古すぎるか、あるいは、以前に使用されたことがあります。 |