欢迎参加我们将于 2022 年 10 月 18 日举办的 Firebase 峰会(线上线下同时进行),了解 Firebase 如何帮助您加快应用开发速度、满怀信心地发布应用并在之后需要时轻松地扩大应用规模。立即报名

开始在 Web 应用程序中使用带有 reCAPTCHA Enterprise 的 App Check

此页面向您展示如何使用 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 项目

  1. 如果您还没有这样做,请将 Firebase 添加到您的 JavaScript 项目中。

  2. 打开 Cloud 控制台的reCAPTCHA Enterprise部分并执行以下操作:

    1. 如果系统提示您启用 reCAPTCHA Enterprise API,请执行此操作。
    2. 创建一个网站类型键。您需要指定托管 Web 应用程序的域。取消选中“使用复选框挑战”选项。
  3. 在 Firebase 控制台的App Check部分注册您的应用以使用 reCAPTCHA Enterprise 提供程序使用 App Check。您需要提供在上一步中获得的站点密钥。

    您通常需要注册项目的所有应用,因为一旦您为 Firebase 产品启用强制执行,只有已注册的应用才能访问该产品的后端资源。

  4. 可选:在应用注册设置中,为提供商发布的应用检查令牌设置自定义生存时间 (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 部分启用强制执行。

监控指标并启用强制执行

但是,在启用强制执行之前,您应该确保这样做不会破坏您现有的合法用户。另一方面,如果您发现对应用资源的使用可疑,您可能希望尽快启用强制执行。

为了帮助做出此决定,您可以查看您使用的服务的 App Check 指标:

启用应用检查强制

当您了解 App Check 将如何影响您的用户并准备好继续时,您可以启用 App Check 强制:

在调试环境中使用 App Check

如果在您为 App Check 注册了您的应用程序后,您希望在 App Check 通常不会归类为有效的环境中运行您的应用程序,例如在开发期间本地运行,或者从持续集成 (CI) 环境中运行您的应用程序,您可以创建使用 App Check 调试提供程序而不是真正的证明提供程序的应用程序的调试版本。

请参阅在 Web 应用程序中通过调试提供程序使用应用程序检查

费用说明

每次运行您的 Web 应用程序的浏览器刷新其 App Check 令牌时,App Check 会代表您创建评估以验证用户的响应令牌。您的项目将针对在免费配额之上创建的每个评估收费。有关详细信息,请参阅reCAPTCHA Enterprise 定价

默认情况下,您的 Web 应用程序将每1 小时刷新两次此令牌。要控制您的应用刷新 App Check 令牌的频率(以及由此创建新评估的频率),请配置它们的 TTL