本页面介绍了如何使用旧版 SiteVerify API 端点 (https://www.google.com/recaptcha/api/siteverify) 从应用后端验证用户对 reCAPTCHA 验证任务的响应。只有在维护无法使用 CreateAssessment 的旧版集成或第三方插件时,才应使用此端点。
准备工作
如需调用 SiteVerify 端点,您需要密钥的旧版密钥。如需在 Google Cloud 控制台中查找密钥,请参阅在 Google Cloud 控制台中检索密钥。
请在后端服务器上妥善保管您的密钥,切勿在客户端代码中公开该密钥。
检索用户的回答令牌
旧版 Web 集成会加载非企业版 JavaScript API (https://www.google.com/recaptcha/api.js),该 API 会在 grecaptcha 对象上提供方法,而不是在 grecaptcha.enterprise 对象上提供方法。您可以通过以下方式之一在前端检索用户的回答令牌:
- 当用户在您的网站上提交表单时,从
g-recaptcha-responsePOST 参数中获取。 - 在用户完成 reCAPTCHA v2 验证任务后调用
grecaptcha.getResponse(opt_widget_id)。此方法会以字符串形式返回响应令牌,如果验证未完成,则返回空字符串。可选的opt_widget_id参数用于指定grecaptcha.render()返回的 widget ID;如果省略,则默认为创建的第一个 widget。 - 当用户完成挑战时,作为传递给回调函数的字符串实参;如果您在
g-recaptchaHTML 元素的data-callback属性或grecaptcha.render(container, parameters)方法的callback参数中指定了回调函数名称,则会传递该实参。 - 从
grecaptcha.execute(site_key, {action: action_name})返回的Promise的已解析值中获取,适用于基于得分 (v3) 的密钥。
旧版 grecaptcha 方法(render、getResponse、execute、ready 和 reset)和 g-recaptcha 标记属性使用的参数与 grecaptcha.enterprise 等效项相同。如需了解参数详情,请参阅 reCAPTCHA 的 JavaScript API 参考文档。
如需迁移到更新后的 reCAPTCHA JavaScript API,请参阅迁移 reCAPTCHA JavaScript API。
token 限制
每个 reCAPTCHA 用户响应令牌的有效期都是 2 分钟,并且您只能验证每个令牌 1 次,以防止重放攻击。在收到响应令牌后的两分钟内,使用 reCAPTCHA 验证该令牌。 如果需要新令牌,请再次运行 reCAPTCHA 验证。
API 请求
使用以下端点和方法发送请求:
- 网址:
https://www.google.com/recaptcha/api/siteverify(如果无法访问www.google.com,则为https://www.recaptcha.net/recaptcha/api/siteverify;请参阅在全球范围内使用 reCAPTCHA) - 方法:
POST
在请求中添加以下 POST 参数:
| POST 参数 | 说明 |
|---|---|
secret |
必需。您的网站与 reCAPTCHA 之间的共享 Secret 密钥。 |
response |
必需。由您网站上的 reCAPTCHA 客户端集成机制提供的用户响应令牌。 |
remoteip |
可选。用户的 IP 地址。 |
API 响应
SiteVerify 端点会返回一个 JSON 对象。
对于 Web 集成(基于得分的 v3、复选框 v2 或隐形 v2 密钥),响应的格式如下:
{
"success": true|false, // whether this request was a valid reCAPTCHA token for your site
"score": number, // the score for this request (0.0 - 1.0) for score-based (v3) keys
"action": string, // the action name for this request (important to verify)
"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
}
错误代码参考
下表介绍了 error-codes 数组中可能显示的错误代码:
| 错误代码 | 说明 |
|---|---|
missing-input-secret |
缺少 secret 参数。 |
invalid-input-secret |
secret 参数无效或格式不正确。 |
missing-input-response |
缺少 response 参数。 |
invalid-input-response |
response 参数无效或格式不正确。 |
bad-request |
请求无效或格式不正确。 |
timeout-or-duplicate |
该响应不再有效,因为其已过期或已被使用。 |