将 Identity Platform 与 reCAPTCHA Enterprise API 集成
本文档介绍了如何使用 Identity Platform 与 reCAPTCHA Enterprise API 的集成来增强用户的安全性。此功能可让您的应用更具弹性,能够更好地防范垃圾内容、滥用行为和其他欺诈活动。
集成会代表您创建 reCAPTCHA Enterprise 评估,以验证用户请求。如需了解价格信息,请参阅 reCAPTCHA 价格。
概览
设置 Identity Platform 与 reCAPTCHA Enterprise API 的集成后,您将启用 reCAPTCHA 的默认保护功能 reCAPTCHA 漫游器防护。启用聊天机器人防范功能后,Identity Platform 会代表您在项目中预配基于得分的 reCAPTCHA 密钥。当用户使用以下任一操作访问您的应用或网站时,如果相应的提供程序处于启用状态,客户端 SDK 会加载 reCAPTCHA。
提供商 | 操作 | 方法 |
---|---|---|
passwordProvider |
电子邮件地址和密码登录 | signInWithPassword |
使用电子邮件地址和密码注册 | signUpPassword |
|
电子邮件链接登录 | getOobCode |
|
重设密码 | getOobCode |
|
phoneProvider |
使用电话号码注册或登录 | sendVerificationCode |
注册多重身份验证 (MFA) 手机号码 | mfaSmsEnrollment |
|
使用手机号码进行 MFA 身份验证登录 | mfaSmsSignIn |
然后,reCAPTCHA 会向 Identity Platform 提供得分,以便 Identity Platform 根据您的配置和风险容忍度评估请求的风险。
如需了解详情,请参阅 reCAPTCHA 概览。
准备工作
根据您要使用 reCAPTCHA 保护的身份验证流程类型,确保您已设置以下内容:
- 对于电子邮件和密码身份验证流程,请确保您已为用户配置电子邮件登录。
对于基于短信的身份验证流程,请确保您已完成以下任一项的初始配置:
创建服务账号
若要将 Identity Platform 与 reCAPTCHA Enterprise API 集成,则需要为将使用 reCAPTCHA 的每个项目创建一个 Identity Platform 服务账号。这样,Identity Platform 就可以代表您管理 reCAPTCHA 密钥。如果您已创建服务账号,请向其授予对 reCAPTCHA 的访问权限。
如果您尚未创建服务账号,或者您有其他项目要使用 reCAPTCHA 进行保护,请执行以下操作:
使用 Google Cloud CLI 创建服务账号:
gcloud beta services identity create \ --service=identitytoolkit.googleapis.com \ --project=PROJECT_ID
将
PROJECT_ID
替换为项目 ID。为该服务账号授予对 reCAPTCHA 的访问权限:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-identitytoolkit.iam.gserviceaccount.com \ --role=roles/identitytoolkit.serviceAgent
替换以下内容:
PROJECT_ID
:项目 IDPROJECT_NUMBER
:项目账号
reCAPTCHA 聊天机器人防范模式
reCAPTCHA 聊天机器人防范功能有两种模式可帮助您保护用户:审核和强制执行。这些模式的行为因身份提供方而异。
电子邮件地址与密码提供商
对于电子邮件地址和密码身份验证流程,审核和强制执行模式的行为如下所示。
审核模式
当您将电子邮件地址和密码强制执行设置为审核模式时,Identity Platform 会在您的项目中创建一个或多个 reCAPTCHA 密钥,用于评估对 Identity Platform API 的流量,而不会阻止任何请求。您可以使用审核模式期间发出的指标来确定是否应启用 reCAPTCHA 强制执行。
强制模式
当您将电子邮件地址和密码强制执行设置为强制执行模式时,Identity Platform 会在您的项目中创建一个或多个 reCAPTCHA 密钥,用于评估对 Identity Platform API 的流量。不包含 reCAPTCHA 令牌的 API 请求将被拒绝。请仅在将所有客户端迁移到支持 reCAPTCHA 的 SDK 后启用强制执行。
电话提供商
对于手机身份验证流程,审核模式和强制执行模式的行为如下所示。
审核模式
当您将手机身份验证强制执行设置为审核模式时,Identity Platform 会使用 reCAPTCHA 机器人防范功能进行应用验证。如果用户请求通过了聊天机器人防范评估,Identity Platform 会向用户的手机发送一条包含验证码的短信。如果请求未通过聊天机器人防范评估,并且您使用的是客户端 SDK,系统会触发后备验证方法来完成手机身份验证流程。接受的回退方法取决于应用的平台。
客户端 SDK 会在以下情况下触发回退验证方法:
- reCAPTCHA 令牌缺失。
- reCAPTCHA 令牌无效或已过期。
- reCAPTCHA 令牌未达到得分阈值。
- reCAPTCHA 未正确配置。
确保已为应用的平台设置回退验证方法,并准备好在必要时由客户端 SDK 触发。
Web
如果初始聊天机器人防范评估失败,审核模式将依赖 reCAPTCHA v2 进行验证。因此,您必须设置 reCAPTCHA 验证程序 (RecaptchaVerifier
),并将其传递给以下手机身份验证操作:
verifyPhoneNumber
signInWithPhoneNumber
linkWithPhoneNumber
reauthenticateWithPhoneNumber
auth/argument-error
。如需详细了解如何设置 reCAPTCHA 验证程序,请参阅 Firebase 文档中的设置 reCAPTCHA 验证程序。
Android
如果初始聊天机器人防范评估失败,审核模式会通过 Play Integrity API 验证您的应用。如果此验证失败,系统会触发 reCAPTCHA v2。 reCAPTCHA v2 可能会在以下场景中触发:
- 如果最终用户的设备未安装 Google Play 服务。
- 如果相关应用未通过 Google Play 商店分发(针对 Authentication SDK 21.2.0 及更高版本)。
- 如果获得的 SafetyNet 令牌无效(针对 21.2.0 之前的 Authentication SDK 版本)。
iOS
如果初始聊天机器人防范评估失败,审核模式将依赖于静默推送通知进行验证。此验证方法涉及使用静默推送通知向请求设备上的应用发送令牌。如果您的应用成功收到通知,手机身份验证流程会继续。如果您的应用未收到推送通知,系统会触发 reCAPTCHA v2。 如果未正确配置静默推送通知,系统可能会触发 reCAPTCHA v2。
如需详细了解如何设置 iOS 应用验证,请参阅 Firebase 文档中的启用应用验证。
强制模式
当您将手机身份验证强制执行设置为强制模式时,Identity Platform 会使用 reCAPTCHA 机器人防范功能进行应用验证。如果用户请求通过了聊天机器人防范评估,Identity Platform 会向用户的手机发送一条包含验证码的短信。如果请求未通过聊天机器人防范评估,Identity Platform 会屏蔽该请求,并且不会发送包含验证码的短信。
强制执行模式不需要回退验证,因此您无需为应用设置任何其他验证方法。不过,如果您决定将应用的 reCAPTCHA 模式更改为 AUDIT
或 OFF
,我们建议您为 Web 应用设置 reCAPTCHA 验证器,以确保启用 reCAPTCHA v2。
设置 Identity Platform 与 reCAPTCHA Enterprise API 的集成
如需设置 Identity Platform 与 reCAPTCHA Enterprise API 的集成,您需要执行以下任务:
- 使用 Admin SDK 设置 reCAPTCHA 强制执行状态并启用聊天机器人防范功能。
- 为应用的平台配置客户端 SDK。
我们建议您先在审核模式下启用 reCAPTCHA 强制执行功能,然后监控项目发出的 reCAPTCHA 指标,以确保身份验证流程得到适当保护。这样做是为了避免在审核用户对 reCAPTCHA 的使用情况时中断用户流量。验证您的身份验证流程是否受保护后,将聊天机器人防范设置为 ENFORCE
。
启用 reCAPTCHA 聊天机器人防范功能
电子邮件地址与密码提供商
如需为电子邮件密码身份验证流程启用 reCAPTCHA 聊天机器人防范功能,请执行以下操作:
如果尚未执行此操作,请为您的项目启用 reCAPTCHA Enterprise API。
如需为项目启用聊天机器人防范功能,请使用 Admin SDK。Node.js Admin SDK 11.7.0 及更高版本支持 reCAPTCHA。
例如:
// Update project config with reCAPTCHA config const updateConfigRequest = { recaptchaConfig: { emailPasswordEnforcementState: 'ENFORCE_MODE', managedRules: [{ endScore: END_SCORE, action: 'BLOCK' }] } }; const updateProjectConfigWithRecaptcha = () => { getAuth().projectConfigManager().updateProjectConfig(updateConfigRequest).then((response) => { console.log('Updated reCAPTCHA config for project: ', response.recaptchaConfig); }).catch((error) => { console.log('Error updating project config:', error); }); }
替换以下内容:
ENFORCE_MODE
:您要为 reCAPTCHA 电子邮件地址和密码身份验证强制执行设置的模式。有效值为OFF
、AUDIT
和ENFORCE
。如需启用聊天机器人防护,此参数必须设置为AUDIT
或ENFORCE
。首次启用聊天机器人防范功能时,我们建议您先将此参数设置为AUDIT
,确保您的身份验证流程受到保护,然后再将其设置为ENFORCE
。如需详细了解这些模式的运作方式,请参阅 reCAPTCHA 机器人防范模式。END_SCORE
:请求在失败之前可以获得的最低聊天机器人防范评估得分。您可以将此得分设置为介于0.0
到1.0
之间。例如,如果您将阈值设置为0.6
,则 reCAPTCHA 会拒绝得分为0.5
或更低的任何请求。因此,得分越高,规则就越严格。
您还可以使用 Admin SDK 为tenant使用相同的配置方法启用聊天机器人防范功能。如需详细了解如何更新租户,请参阅更新租户。
如果您在 iOS 或 Android 上使用 Identity Platform,则必须通过 Firebase 控制台注册应用:
- 对于 iOS,注册使用 Identity Platform 的每个软件包 ID
- 对于 Android,注册使用 Identity Platform 的每个 Android 软件包名称
如果您在网站上使用 Identity Platform,则必须为使用 reCAPTCHA 的每个网域添加已获授权的网域。如需添加已获授权的网域,请执行以下操作:
在 Google Cloud 控制台中,前往 Identity Platform 页面。
依次前往设置 > 安全。
点击添加网域。
输入域名,然后点击添加以保存域名。
reCAPTCHA 密钥预配可能需要几分钟才能完成。
如果您已将强制执行设置为审核模式,我们建议您监控 reCAPTCHA 指标以防范聊天机器人,以确保您的流程受到保护。
电话提供商
如需为基于短信的身份验证流程启用 reCAPTCHA 聊天机器人防护,请执行以下操作:
如果尚未执行此操作,请为您的项目启用 reCAPTCHA Enterprise API。
如需为项目启用聊天机器人防范功能,请使用 Admin SDK。Node.js Admin SDK 12.7.0 及更高版本支持 reCAPTCHA。
例如:
// Update project config with reCAPTCHA config const updateProjectConfigRequest = { recaptchaConfig: { phoneEnforcementState: 'ENFORCE_MODE', managedRules: [{ endScore: END_SCORE, action: 'BLOCK' }], useSmsBotScore: 'true', } } let projectConfig = await getAuth().projectConfigManager().updateProject(updateProjectConfigRequest);
替换以下内容:
ENFORCE_MODE
:您要为 reCAPTCHA 手机身份验证强制执行设置的模式。有效值为OFF
、AUDIT
和ENFORCE
。如需为基于短信的流程启用聊天机器人防范功能,此参数必须设置为AUDIT
或ENFORCE
,并且useSmsBotScore
必须设置为true
。首次启用聊天机器人防范功能时,我们建议您先将此参数设置为
AUDIT
,确保您的身份验证流程受到保护,然后再将其设置为ENFORCE
。如需详细了解这些模式的运作方式,请参阅 reCAPTCHA 机器人防范模式。END_SCORE
:请求在失败之前可以获得的最低聊天机器人防范评估得分。您可以将此得分设置为介于0.0
到1.0
之间。例如,如果您将阈值设置为0.6
,则 reCAPTCHA 会拒绝得分为0.5
或更低的任何请求。因此,得分越高,规则就越严格。
您还可以使用 Admin SDK 为tenant使用相同的配置方法启用聊天机器人防范功能。如需详细了解如何更新租户,请参阅更新租户。
如果您在 iOS 或 Android 上使用 Identity Platform,则必须通过 Firebase 控制台注册应用:
- 对于 iOS,注册使用 Identity Platform 的每个软件包 ID
- 对于 Android,注册使用 Identity Platform 的每个 Android 软件包名称
如果您在 Web 上使用 Identity Platform,则必须为使用 reCAPTCHA 的每个网域添加已获授权的网域。如需添加已获授权的网域,请执行以下操作:
在 Google Cloud 控制台中,前往 Identity Platform 页面。
依次前往设置 > 安全。
点击添加网域。
输入域名,然后点击添加以保存域名。
reCAPTCHA 密钥预配可能需要几分钟才能完成。
如果您已将强制执行设置为审核模式,我们建议您监控 reCAPTCHA 指标以防范聊天机器人,以确保您的流程受到保护。
配置客户端 SDK
根据应用的平台配置客户端 SDK。
Web
更新到最新版本的 Web SDK。
- JavaScript SDK 9.20.0 及更高版本支持在 Web 应用中使用 reCAPTCHA 进行电子邮件和密码身份验证。
- JavaScript SDK 11 及更高版本支持在 Web 应用中使用 reCAPTCHA 进行手机验证。
将 Web SDK 与应用集成后,该 SDK 会自动提取您的 reCAPTCHA 配置,并为您配置的提供方启用保护。
如果需要,您可以强制提取 reCAPTCHA 信号,如下所示:
import { initializeRecaptchaConfig } from '@firebase/auth'; // Initialize Firebase Authentication const auth = getAuth(); initializeRecaptchaConfig(auth) .then(() => { console.log("Recaptcha Enterprise Config Initialization successful.") }) .catch((error) => { console.error("Recaptcha Enterprise Config Initialization failed with " + error) });
Android
请更新到最新版 Android SDK。Android SDK 23.1.0 及更高版本支持在 Android 应用中对电子邮件和密码身份验证以及手机身份验证使用 reCAPTCHA。
此外,若要支持 reCAPTCHA,则需要 API 级别 23 (Marshmallow) 或更高级别以及 Android 6 或更高版本。
将 Android SDK 与您的应用集成后,该 SDK 会自动提取您的 reCAPTCHA 配置,并为您配置的提供程序启用保护。
将以下构建规则添加到应用级
build.gradle
文件的依赖项部分:implementation 'com.google.android.recaptcha:recaptcha:18.5.1'
请务必使用 reCAPTCHA SDK 18.5.1 或更高版本。
如果需要,您可以强制提取 reCAPTCHA 信号,如下所示:
- Kotlin:
// Initialize Firebase Authentication auth = Firebase.auth auth.initializeRecaptchaConfig().addOnCompleteListener(this) { task -> if (task.isSuccessful) { Log.d(TAG, "Recaptcha Enterprise Initialization successful.") } else { Log.w(TAG, "Recaptcha Enterprise Initialization failed.") } }
- Java:
// Initialize Firebase Authentication auth = FirebaseAuth.getInstance(); auth.initializeRecaptchaConfig().addOnCompleteListener( this, new OnCompleteListener<void>() { @Override public void onComplete(@NonNull Task<void> task) { if (task.isSuccessful()) { Log.d(TAG, "Recaptcha Enterprise Initialization successful."); } else { Log.w(TAG, "Recaptcha Enterprise Initialization failed."); } } });
iOS
更新到 iOS SDK 11.6.0 或更高版本。 将 iOS SDK 与您的应用集成后,SDK 会自动提取您的 reCAPTCHA 配置,并为您配置的提供程序启用保护。
如需将 reCAPTCHA iOS SDK 集成到您的应用,请参阅准备环境。
确保链接器标志中列出了
-ObjC
。依次前往目标 > 构建设置 > 所有 > 链接,然后验证Other Linker Flags
是否显示-ObjC
。如果需要,您可以强制提取 reCAPTCHA 信号,如下所示:
- Swift:
// Initialize Firebase Authentication try await Auth.auth().initializeRecaptchaConfig()
- Objective-C:
// Initialize Firebase Authentication [[FIRAuth auth] initializeRecaptchaConfigWithCompletion:^(NSError * _Nullable error) { // Firebase Authentication initialization finished }];
监控 reCAPTCHA 指标以防范聊天机器人
在将 reCAPTCHA 强制执行设置为强制执行模式之前,我们建议您使用审核模式并监控您的项目发出的 reCAPTCHA 指标,以确保身份验证流程受到保护。例如,这些指标可帮助您确定是否已正确设置 Identity Platform 与 reCAPTCHA Enterprise API 的集成。它们还可以帮助您微调用户流量的得分阈值。如果 reCAPTCHA 密钥预配失败或未创建所需的服务账号,reCAPTCHA 身份验证尝试仍会正常成功。
检查您的项目向 Cloud Monitoring 发出的以下指标,确保 reCAPTCHA 身份验证正常运行:
identitytoolkit.googleapis.com/recaptcha/verdict_count
:跟踪 reCAPTCHA 返回的不同判定结果。identitytoolkit.googleapis.com/recaptcha/token_count
:跟踪 Identity Platform 后端收到的 reCAPTCHA 令牌的数量和状态。identitytoolkit.googleapis.com/recaptcha/risk_scores
:跟踪聊天机器人防范得分分布情况。
如需了解详情,请参阅监控 reCAPTCHA 指标。
强制执行 reCAPTCHA 聊天机器人防范措施
在验证您的应用正在接收可接受的用户流量后,您可以启用 reCAPTCHA 强制执行功能来保护您的用户。确保不会干扰现有用户,包括可能使用旧版应用的用户。
电子邮件地址与密码提供商
如需为项目或租户启用电子邮件地址和密码身份验证流程的 reCAPTCHA 强制执行,请使用 Admin SDK 运行以下命令:
const enforceRequest = {
recaptchaConfig: {
emailPasswordEnforcementState: 'ENFORCE',
}]
}
};
电话提供商
如需为项目或租户上的基于短信的身份验证流程启用 reCAPTCHA 强制执行,请使用 Admin SDK 运行以下命令:
const enforceRequest = {
recaptchaConfig: {
phoneEnforcementState: 'ENFORCE',
useSmsBotScore: 'true'
}]
}
};
停用 reCAPTCHA 聊天机器人防范功能
电子邮件地址与密码提供商
如需为电子邮件地址和密码身份验证流程停用聊天机器人防范功能,请使用 Admin SDK 运行以下命令:
const disableRequest = {
recaptchaConfig: {
emailPasswordEnforcementState: 'OFF',
}
};
电话提供商
如需为基于短信的身份验证流程停用聊天机器人防范功能,请使用 Admin SDK 运行以下命令:
const disableRequest = {
recaptchaConfig: {
phoneEnforcementState: 'OFF',
useSmsBotScore: 'false'
}
};
使用 Cloud Run 函数替换 reCAPTCHA 判定结果
除了配置分数阈值之外,您还可以使用自定义 Cloud Run functions 屏蔽函数替换给定令牌的 reCAPTCHA 判定结果。如果给定用户登录的 reCAPTCHA 得分可能较低,但该用户是可信用户或已通过其他方式完成验证,因此可以完成登录,这会很有帮助。
如需详细了解如何使用 reCAPTCHA 配置屏蔽函数,请参阅使用 Cloud Functions 屏蔽函数扩展 Firebase Authentication。
后续步骤
- 为基于短信的身份验证流程启用 reCAPTCHA 短信话费欺诈防护。
- 了解如何使用您自己的 reCAPTCHA 密钥。
- 详细了解如何监控 reCAPTCHA 指标。
- 详细了解 reCAPTCHA。