如果无法与 reCAPTCHA JavaScript 或移动 SDK 进行客户端集成(例如,为了保护 API 端点),则可以在应用服务器上设置 reCAPTCHA Express。
reCAPTCHA Express 是一项功能,可让您在没有客户端集成或客户端信号的情况下创建评估。reCAPTCHA Express 仅使用后端信号来生成 reCAPTCHA 风险得分。 您可以使用此风险得分来决定是否提供请求、重定向到验证页面或记录请求以供日后分析。
准备工作
在 Google Cloud 控制台的项目选择器页面上, 选择或创建 Google Cloud 项目。
记录您的 Google Cloud 项目 ID 以备后用。选择或创建项目所需角色
- 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已被授予角色的任何项目。
-
创建项目:如需创建项目,您需要拥有 Project Creator 角色
(
roles/resourcemanager.projectCreator),该角色包含resourcemanager.projects.create权限。了解如何授予 角色。
验证是否已为您的 Google Cloud 项目启用结算功能。
启用 reCAPTCHA Enterprise API。
启用 API 所需的角色
如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (
roles/serviceusage.serviceUsageAdmin),该角色包含serviceusage.services.enable权限。了解如何授予角色。创建用于身份验证的 API 密钥:
在 Google Cloud 控制台中,前往凭据页面。
点击 创建凭据,然后选择 API 密钥。
记录 API 密钥以备后用。
创建 reCAPTCHA Express 密钥
如需实现 reCAPTCHA Express,请创建 reCAPTCHA Express 密钥。
在 Google Cloud 控制台中,激活 Cloud Shell。
Cloud Shell 会话随即会在控制台的底部启动,并显示命令行提示符。 Google Cloud Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。
gcloud
如需创建 reCAPTCHA 密钥,请使用 gcloud recaptcha keys create 命令。
在使用以下任何命令数据之前, 请进行以下替换:
- INTEGRATION_TYPE:集成类型。
指定
score。 - DISPLAY_NAME:密钥的名称。通常是网站名称。
执行 gcloud recaptcha keys create 命令:
Linux、macOS 或 Cloud Shell
gcloud recaptcha keys create \ --express \ --display-name=DISPLAY_NAME
Windows (PowerShell)
gcloud recaptcha keys create ` --express ` --display-name=DISPLAY_NAME
Windows (cmd.exe)
gcloud recaptcha keys create ^ --express ^ --display-name=DISPLAY_NAME
响应包含新创建的 reCAPTCHA 密钥。
REST
如需了解密钥类型和集成类型的 API 参考文档信息, 请参阅密钥 和集成类型。在使用任何请求数据之前, 请进行以下替换:
- INTEGRATION_TYPE:集成类型。
指定
score。 - DISPLAY_NAME:密钥的名称。通常是网站名称。
- DEFAULT_SCORE_THRESHOLD:对于基于政策的验证密钥,此值定义了在未定义自定义得分阈值时密钥的通用验证阈值。此功能目前处于预览版阶段。
- ACTION_SCORE_THRESHOLDS:对于基于政策的验证密钥,此值指定了操作和介于 0.0 和 1.0 之间的相应阈值得分。例如,
login='{"scoreThreshold": "0.3"}',signup='{"scoreThreshold": "0.1"}'。此功能目前处于预览版阶段。
HTTP 方法和网址:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys
请求 JSON 正文:
{ "displayName": "DISPLAY_NAME", "expressSettings": {} }如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为
request.json的文件中,然后执行以下命令:curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys"PowerShell
将请求正文保存在名为
request.json的文件中,然后执行以下命令:$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys" | Select-Object -Expand Content您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/project-id/keys/7Ldqgs0UBBBBBIn4k7YxEB-LwEh5S9-Gv6QQIWB8m", "displayName": "DISPLAY_NAME, "expressSettings": { } }- INTEGRATION_TYPE:集成类型。
指定
记录您的 Express 密钥以备后用。
创建评估
如需从应用服务器向 reCAPTCHA 发出请求,
请使用 projects.assessments.create
方法创建评估。
在使用任何请求数据之前, 请进行以下替换:
- API_KEY:您为身份验证创建的 API 密钥。
- EXPRESS_KEY:您为应用创建的 reCAPTCHA Express 密钥。
- USER_IP_ADDRESS:与此事件相关的用户设备发出的请求中的 IP 地址。
- HEADER_INFO:可选。客户端发送到应用服务器的 HTTP 标头。它是一个字符串数组,其中包含 `[key:value]` 格式的请求标头。例如,`[key:value, key:value,...]`。我们建议您按要求的顺序尽可能多地共享标头。确保同一会话中所有请求的标头顺序一致。
- JA4_FINGERPRINT:可选。JA4 是 TLS Client Hello 数据包的某些字段的指纹。如需了解详情,请参阅 JA4+™ 网络指纹。
- URI_NAME:可选。用户正在访问的 URI。
- USER_AGENT:可选。与此事件相关的用户设备发出的请求中存在的用户代理 。
- ACCOUNT_ID:可选。用户账号的唯一且永久性标识符,例如哈希账号名称。
HTTP 方法和网址:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY
请求 JSON 正文:
{
"event": {
"siteKey": "EXPRESS_KEY",
"express": true,
"userIpAddress": "USER_IP_ADDRESS",
"headers": ["HEADER_INFO"],
"ja4": "JA4_FINGERPRINT",
"requestedUri": "URI_NAME",
"userAgent": "USER_AGENT",
"user_info": {
"account_id": "ACCOUNT_ID"
}
}
}
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为 request.json 的文件中,然后执行以下命令:
curl -X POST \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY"
PowerShell
将请求正文保存在名为 request.json 的文件中,然后执行以下命令:
$headers = @{ }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY" | Select-Object -Expand Content您应该收到类似以下内容的 JSON 响应:
{
"name": "projects/123456789/assessments/abcdef1234000000",
"event": {
"token": "",
"siteKey": "6L...",
"userAgent": "Mozilla/5.0 (X11; CrOS x86_64 13816.55.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.86 Safari/537.36",
"userIpAddress": "1.2.3.4",
"express": true,
"requestedUri": "https://example.com/",
"user_info": {
"account_id": "123456789"
},
"headers": [ "Origin: https://example.com", "Referer: https://example.com.login"],
},
"riskAnalysis": {
"score": 0.7,
"reasons": []
}
}
解释得分
reCAPTCHA Express 仅返回两个得分:0.3 和 0.7。
0.3 表示用户互动风险较高,很可能具有欺诈性;0.7
表示用户互动风险较低,很可能是合法的。
如果缺少信号,reCAPTCHA Express 默认返回 0.7。