本页面介绍了如何从应用后端验证用户对 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 参数无效或格式错误。 |
缺少输入-响应 | 缺少响应参数。 |
输入-响应无效 | 响应参数无效或格式错误。 |
错误请求 | 请求无效或格式错误。 |
超时或重复 | 响应不再有效:要么太旧了,要么之前使用过。 |