实现 Firebase App Check 以保护 API 免遭未经授权的客户端访问

如果您直接从移动应用或 Web 应用调用 API(例如,允许访问生成式 AI 模型的 API),则该 API 很容易被未经授权的客户端滥用。为了帮助保护这些 API,您可以使用 Firebase App Check来验证所有传入的 API 调用 是否来自您的实际应用。

Firebase AI Logic 提供了一个代理网关,可让您与 Firebase App Check 集成,并保护您的 移动应用和 Web 应用调用的生成式 AI 模型 API。将 App CheckFirebase AI Logic SDK 搭配使用时,支持我们的所有配置:

  • 保护“Gemini API”提供方:Gemini Developer APIVertex AI Gemini API

  • 保护所有受支持的模型,包括 Gemini 模型和 Imagen 模型。

App Check 的工作原理简要概览

使用 App Check 时,运行您的应用的设备会使用应用或设备证明 提供方,用于验证以下两项或其中一项:

  • 请求来自您的正版应用
  • 请求来自真实的、未经篡改的设备

此证明会附加到您的应用使用 Firebase AI Logic SDK 发出的每个请求。启用 App Check 强制执行后, 来自没有有效证明的客户端的请求将被拒绝,来自未经您授权的应用或平台的请求也将被拒绝。

我们建议您在设置 App Check 时,务 ate to 为即将推出的增强型保护 (称为 重放攻击防范)做好准备。

您可以在 的文档中找到有关 App Check 的详细信息,包括其 配额和限制

可用提供方和实现说明

App Check 文档提供了证明提供方的说明 以及实现说明。

  1. 选择默认提供方,然后按照以下链接中的实现说明进行操作:

    请注意,如果没有任何默认提供方能满足您的需求, 您可以实现自己的提供方 从而使用第三方证明提供方或您自己的证明 方法。

  2. (推荐) 为即将推出的 App Check增强型保护(称为重放攻击防范)做好准备。

  3. (必需) 在向真实用户发布应用之前, 启用 App Check 强制执行

Flutter 需要特殊实例化

点击您的 Gemini API 提供方,以查看此页面上特定于提供方的内容 和代码。

在 Flutter 应用中将 App CheckFirebase AI Logic 搭配使用时,您需要 在实例化期间显式传入 App Check,如下所示:

// ...

final ai = await FirebaseAI.googleAI(
  appCheck: FirebaseAppCheck.instance, // for Flutter, pass in App Check explicitly
);

// ...

为即将推出的增强型保护做好准备

Apple 平台(v12.2.0+)、Android(v17.2.0+,BoM v34.2.0+)、 Web(v12.3.0+)和 Flutter(v3.2.0+,BoM v4.2.0+)支持启用有限使用令牌。 Unity 支持即将推出。

默认情况下,App Check 使用会话令牌,该令牌的 存留时间 (TTL) 可配置,介于 30 分钟7 天之间。 这些会话令牌由 App Check SDK 缓存,并随 应用发出的请求一起发送。

未来,App Check 将添加为 Firebase AI Logic 启用重放攻击防范 的选项(类似于 App Check 已经 为某些其他资源提供的支持)。启用重放攻击防范后,它会通过以下方式增强保护:

  • App Check 仅允许附带一种特殊令牌(称为 有限使用令牌)的请求。

  • 验证有限使用令牌后,该令牌将被消耗,因此只能使用一次,从而防止重放攻击。

为了为重放攻击防范做好准备,我们建议您在设置 App Check启用有限使用令牌。这样,当重放攻击防范可用时,您就可以更快地启用它,因为您的更多用户将使用发送有限使用令牌的应用版本。

如果您现在(在重放攻击防范不可用时)在应用中启用有限使用令牌,请注意以下事项:

  • App Check 不会阻止使用 有效的会话令牌

  • 与会话令牌一样,有限使用令牌由 App Check SDK 缓存,并随请求一起发送。与默认会话 令牌相比,这些有限使用令牌 提供的额外保护较少,因为有限使用令牌的 TTL 比会话令牌短(只有 5 分钟,且不可调整)。

  • 即使有限使用令牌的有效期为 5 分钟,SDK 仍会为每个请求生成一个新令牌。此过程可能会为您的请求增加一些延迟时间。

但是,当重放攻击防范在未来可用于 Firebase AI Logic(并且您启用了它)时,将无法使用会话令牌和重复使用有限使用令牌。请注意,为每个请求生成新令牌所产生的额外延迟时间仍会发生。

启用有限使用令牌

点击您的 Gemini API 提供方,以查看此页面上特定于提供方的内容 和代码。

以下是如何启用有限使用令牌:

  1. 实现 App Check,并确保您已 为应用App Check强制执行

  2. 在实例化期间,在应用中通过将 useLimitedUseAppCheckTokens 参数设置为 true 来启用有限使用令牌:

    Swift

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    let ai = FirebaseAI.firebaseAI(
      backend: .googleAI(),
      useLimitedUseAppCheckTokens: true
    )
    
    // ...
    
    

    Kotlin

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    val ai = Firebase.ai(
      backend = GenerativeBackend.googleAI(),
      useLimitedUseAppCheckTokens = true
    )
    
    // ...
    
    

    Java

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    FirebaseAI ai = FirebaseAI.getInstance(
      /* backend: */ GenerativeBackend.googleAI(),
      /* useLimitedUseAppCheckTokens: */ true
    );
    
    // ...
    
    

    Web

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    const ai = getAI(firebaseApp, {
      backend: new GoogleAIBackend(),
      useLimitedUseAppCheckTokens: true
    });
    
    // ...
    
    

    Dart

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    final ai = await FirebaseAI.googleAI(
      appCheck: FirebaseAppCheck.instance, // for Flutter, pass in App Check explicitly
      useLimitedUseAppCheckTokens: true,
    );
    
    // ...
    
    

    Unity

    在未来的版本中,将支持在 Unity 游戏中使用有限使用令牌。请过段时间再来看看!

了解 Firebase AI Logic 如何与 App Check 集成

如需使用 Firebase AI Logic SDK,必须在 Firebase 项目中启用 Firebase AI Logic API (firebasevertexai.googleapis.com) 。这是因为由 Firebase AI Logic SDK 发出的请求首先会发送到 Firebase AI Logic 服务器,该服务器充当代理网关,Firebase App Check 验证 会在请求被允许继续发送到您选择的 “Gemini API”提供方的后端以及用于访问 GeminiImagen 模型的 API 之前进行