验证用户的响应

本页面介绍了如何从应用后端验证用户对 reCAPTCHA 质询的响应。

对于 Web 用户,您可以通过以下三种方式之一获取用户的响应令牌:

  • g-recaptcha-response POST 参数(用户在您的网站上提交表单时)
  • grecaptcha.getResponse(opt_widget_id)(在用户完成 reCAPTCHA 验证后)
  • 作为回调函数的字符串参数(如果在 g-recaptcha 标记属性或 grecaptcha.render 方法中的回调参数中指定了 data-callback

对于 Android 库用户,如果状态返回成功,您可以调用 SafetyNetApi.RecaptchaTokenResult.getTokenResult() 方法来获取响应令牌。

令牌限制

每个 reCAPTCHA 用户响应令牌的有效期均为两分钟,并且只能进行一次验证,以防止重放攻击。如果您需要新令牌,可以重新运行 reCAPTCHA 验证。

获取响应令牌后,您需要使用以下 API 通过 reCAPTCHA 在两分钟内对其进行验证,以确保令牌有效。

API 请求

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

POST 参数 说明
secret 必需。您的网站与 reCAPTCHA 共用的密钥。
条回复 必需。在网站上的 reCAPTCHA 客户端集成提供的用户响应令牌。
遥控器 (可选)用户的 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
}

错误代码参考

错误代码 说明
缺少输入密钥 Secret 参数缺失。
无效输入密钥 Secret 参数无效或格式错误。
缺少输入-响应 缺少响应参数。
输入-响应无效 响应参数无效或格式错误。
错误请求 请求无效或格式错误。
超时或重复 响应不再有效:要么太旧了,要么之前使用过。