此页面向您展示如何使用 reCAPTCHA Enterprise 提供程序在 Web 应用程序中启用应用程序检查。当您启用 App Check 时,您有助于确保只有您的应用可以访问您项目的 Firebase 资源。请参阅此功能的概述。
reCAPTCHA Enterprise 是一项免费配额的付费服务。 App Check 还支持reCAPTCHA v3 ,这是一项免费的服务。要了解 reCAPTCHA v3 和 reCAPTCHA Enterprise 之间的区别,请参阅功能比较。
请注意,App Check 使用基于 reCAPTCHA Enterprise 分数的站点密钥,这使其对用户不可见。 reCAPTCHA Enterprise 提供商不会要求用户随时解决挑战。
如果您想将 App Check 与您自己的自定义提供程序一起使用,请参阅实现自定义应用程序检查提供程序。
1. 设置您的 Firebase 项目
如果您还没有这样做,请将 Firebase 添加到您的 JavaScript 项目中。
打开 Cloud 控制台的reCAPTCHA Enterprise部分并执行以下操作:
- 如果系统提示您启用 reCAPTCHA Enterprise API,请执行此操作。
- 创建一个网站类型键。您需要指定托管 Web 应用程序的域。取消选中“使用复选框挑战”选项。
在 Firebase 控制台的App Check部分注册您的应用以使用 reCAPTCHA Enterprise 提供程序使用 App Check。您需要提供在上一步中获得的站点密钥。
您通常需要注册项目的所有应用,因为一旦您为 Firebase 产品启用强制执行,只有已注册的应用才能访问该产品的后端资源。
可选:在应用注册设置中,为提供商发布的应用检查令牌设置自定义生存时间 (TTL)。您可以将 TTL 设置为 30 分钟到 7 天之间的任何值。更改此值时,请注意以下权衡:
- 安全性:较短的 TTL 可提供更强的安全性,因为它减少了泄露或拦截的令牌可能被攻击者滥用的窗口。
- 性能:较短的 TTL 意味着您的应用将更频繁地执行证明。由于应用程序证明过程每次执行都会增加网络请求的延迟,因此较短的 TTL 可能会影响应用程序的性能。
- 配额和成本:较短的 TTL 和频繁的重新证明会更快地耗尽您的配额,而对于付费服务,可能会花费更多。请参阅配额和限制。
对于大多数应用程序来说, 1 小时的默认 TTL 是合理的。请注意,App Check 库以大约一半的 TTL 持续时间刷新令牌。
2. 将 App Check 库添加到您的应用程序
如果您还没有将 Firebase 添加到您的网络应用程序中。请务必导入 App Check 库。
3.初始化应用检查
在您访问任何 Firebase 服务之前,将以下初始化代码添加到您的应用程序。您需要将您在云控制台中创建的 reCAPTCHA Enterprise 站点密钥传递给activate()
。
Web version 9
const { initializeApp } = require("firebase/app"); const { initializeAppCheck, ReCaptchaEnterpriseProvider } = require("firebase/app-check"); const app = initializeApp({ // Your Firebase configuration object. }); // Create a ReCaptchaEnterpriseProvider instance using your reCAPTCHA Enterprise // site key and pass it to initializeAppCheck(). const appCheck = initializeAppCheck(app, { provider: new ReCaptchaEnterpriseProvider(/* reCAPTCHA Enterprise site key */), isTokenAutoRefreshEnabled: true // Set to true to allow auto-refresh. });
Web version 8
firebase.initializeApp({ // Your Firebase configuration object. }); // Create a ReCaptchaEnterpriseProvider instance using your reCAPTCHA Enterprise // site key and pass it to activate(). const appCheck = firebase.appCheck(); appCheck.activate( new firebase.appCheck.ReCaptchaEnterpriseProvider( /* reCAPTCHA Enterprise site key */ ), true // Set to true to allow auto-refresh. );
在您的应用中安装 App Check 库后,部署它。
更新后的客户端应用将开始向 Firebase 发出的每个请求发送 App Check 令牌,但 Firebase 产品不需要令牌有效,直到您在 Firebase 控制台的 App Check 部分启用强制执行。有关详细信息,请参阅接下来的两节。
4. 监控请求指标
现在您的更新应用已在用户手中,您可以为您使用的 Firebase 产品启用应用检查。但是,在您这样做之前,您应该确保这样做不会破坏您现有的合法用户。
实时数据库、Cloud Firestore 和 Cloud Storage
您可以用来为实时数据库、Cloud Firestore 和 Cloud Storage 做出此决定的一个重要工具是应用检查请求指标屏幕。
要查看产品的 App Check 请求指标,请打开 Firebase 控制台的App Check部分。例如:
每个产品的请求指标分为四类:
已验证的请求是那些具有有效 App Check 令牌的请求。启用 App Check 强制执行后,只有此类别中的请求才会成功。
过时的客户端请求是那些缺少 App Check 令牌的请求。这些请求可能来自应用检查未包含在应用中之前的旧版 Firebase SDK。
未知来源请求是那些缺少应用检查令牌的请求,它们看起来不像来自 Firebase SDK。这些请求可能来自使用被盗 API 密钥发出的请求,也可能来自未使用 Firebase SDK 发出的伪造请求。
无效请求是那些具有无效应用检查令牌的请求,这些请求可能来自试图模拟您的应用的不真实客户端,或来自模拟环境。
当您决定启用强制执行时,您的应用程序的这些类别的分布应通知您。以下是一些指导方针:
如果几乎所有最近的请求都来自经过验证的客户端,请考虑启用强制措施以开始保护您的后端资源。
如果最近的请求中有很大一部分来自可能已过时的客户端,为避免干扰用户,请考虑等待更多用户更新您的应用,然后再启用强制执行。对已发布的应用程序强制执行应用程序检查将破坏未与应用程序检查 SDK 集成的先前应用程序版本。
如果您的应用尚未启动,您应该立即启用应用检查强制,因为没有任何过时的客户端在使用中。
云函数
对于 Cloud Functions,您可以通过检查函数的日志来获取 App Check 指标。每次调用可调用函数都会发出一个结构化日志条目,如下例所示:
{
"severity": "INFO", // INFO, WARNING, or ERROR
"logging.googleapis.com/labels": {"firebase-log-type": "callable-request-verification"},
"jsonPayload": {
"message": "Callable header verifications passed.",
"verifications": {
// ...
"app": "MISSING", // VALID, INVALID, or MISSING
}
}
}
您可以通过使用以下指标过滤器创建基于日志的计数器指标,在 Google Cloud Console 中分析这些指标:
resource.type="cloud_function" resource.labels.function_name="YOUR_CLOUD_FUNCTION" resource.labels.region="us-central1" labels.firebase-log-type="callable-request-verification"
使用字段jsonPayload.verifications.appCheck
标记指标。
5. 启用强制执行
要启用强制执行,请按照以下每种产品的说明进行操作。为产品启用强制执行后,对该产品的所有未经验证的请求都将被拒绝。
实时数据库、Cloud Firestore 和 Cloud Storage
要为实时数据库、Cloud Firestore(iOS 和 Android)和 Cloud Storage 启用强制执行:
打开 Firebase 控制台的应用检查部分。
展开您要为其启用强制执行的产品的指标视图。
单击强制并确认您的选择。
请注意,启用强制实施后最多可能需要 15 分钟才能生效。
云函数
请参阅为 Cloud Functions 启用应用检查强制。
费用说明
每次运行您的 Web 应用程序的浏览器刷新其 App Check 令牌时,App Check 会代表您创建评估以验证用户的响应令牌。您的项目将针对在免费配额之上创建的每个评估收费。有关详细信息,请参阅reCAPTCHA Enterprise 定价。
默认情况下,您的 Web 应用程序将每1 小时刷新两次此令牌。要控制您的应用刷新 App Check 令牌的频率(以及由此创建新评估的频率),请配置它们的 TTL 。
下一步
如果在您为 App Check 注册了您的应用程序后,您希望在 App Check 通常不会归类为有效的环境中运行您的应用程序,例如在开发期间本地运行,或者从持续集成 (CI) 环境中运行您的应用程序,您可以创建使用 App Check 调试提供程序而不是真正的证明提供程序的应用程序的调试版本。
请参阅在 Web 应用程序中通过调试提供程序使用应用程序检查。