调用Google reCAPTCHA Enterprise API持续返回403 Forbidden的排查咨询
reCAPTCHA Enterprise API调用403 Forbidden错误排查方案
问题背景
调用https://recaptchaenterprise.googleapis.com/v1/projects/{PROJECT_ID}/assessments?key={API_KEY}时持续收到403 Forbidden错误。操作流程严格遵循官方文档中「REST API: 使用API密钥」的方式:
- 请求方法:POST
- 未携带Bearer令牌(按文档要求无需此令牌)
- 请求体:
{"event": {"token":"{RECAPTCHA_TOKEN}","siteKey":"{PROJECT_ID}","expectedAction":"submit"}}
此前组织使用pre-v3版本的reCAPTCHA API(https://www.google.com/recaptcha/api/siteverify?secret={SECRET_KEY}&response={RECAPTCHA_TOKEN})一直正常,API密钥是新增环节,确认密钥本身有效。
排查步骤
- 验证API密钥权限配置
确保API密钥已启用reCAPTCHA Enterprise API访问权限:在Google Cloud控制台的API密钥管理页面,检查该密钥是否将reCAPTCHA Enterprise API添加到「API限制」列表中且状态为启用;同时检查密钥的「应用限制」,如果设置了IP地址限制,确认发起请求的服务器IP在允许列表内,服务器端请求不要设置HTTP引用限制,否则会直接被拦截。 - 检查请求体参数正确性
注意siteKey字段的值应为reCAPTCHA Enterprise站点密钥(不是PROJECT_ID),这里容易出现参数混淆;确认expectedAction的值与前端生成令牌时指定的action完全一致(大小写敏感);验证token是刚生成的未过期令牌(有效期约2分钟)且未被重复使用。 - 确认项目与API的关联状态
检查Google Cloud项目是否已启用reCAPTCHA Enterprise API;确认API密钥所属项目与请求URL中的{PROJECT_ID}为同一个项目,避免跨项目调用导致权限拒绝。 - 排查网络与防火墙限制
尝试通过curl或Postman直接发起请求,排除本地网络、防火墙或代理服务器对请求的拦截;检查是否存在Google Cloud的VPC防火墙规则限制了出站请求到reCAPTCHA Enterprise API的443端口。
关于改用gcloud CLI携带Bearer令牌的可行性
改用基于服务账号的Bearer令牌认证(即gcloud CLI方式)是更安全稳定的方案,尤其适合服务器端调用场景:
- 优势:API密钥易泄露,而服务账号的Bearer令牌可通过gcloud命令或IAM角色实现更精细的权限控制,且令牌有有效期,安全性更高。
- 操作流程:
- 在Google Cloud控制台创建服务账号,为其分配「reCAPTCHA Enterprise Assessor」角色(或自定义精细角色)。
- 通过命令生成临时令牌:
gcloud auth application-default print-access-token - 在请求Header中添加
Authorization: Bearer {生成的令牌},无需再携带API密钥参数。
这种方式能规避API密钥带来的权限配置问题,符合Google Cloud安全最佳实践,推荐生产环境使用。
内容的提问来源于stack exchange,提问作者Greg Boettcher
相关产品推荐
相关产品推荐

