使用 Firebase App Check 防止 Gemini API 遭濫用

直接從行動或網頁應用程式呼叫 API 時,API 容易遭到未經授權的用戶端濫用。如要直接從行動或網頁應用程式呼叫 Gemini API,您必須使用 Firebase AI Logic強制執行 Firebase App Check,防止應用程式遭到濫用。強制執行 App Check後,系統只會允許來自 實際應用程式和/或未經竄改裝置的已驗證要求。

跳至設定操作說明

Firebase AI Logic 提供 Proxy 閘道,可讓您與 Firebase App Check 整合,並在行動和網頁應用程式直接呼叫 Gemini API 時提供保護。對 Firebase AI Logic 強制執行 App Check,有助於保護 Gemini Developer APIAgent Platform Gemini API (formerly Vertex AI)

App Check for Firebase AI Logic 也支援重送攻擊防護機制,也就是說 App Check 權杖只能使用一次。


App Check 運作方式的概要總覽

透過 App Check,執行您應用程式的裝置會使用應用程式或裝置認證供應商,驗證下列一或多項內容:

  • 要求來自正版應用程式
  • 要求來自未經竄改的正版裝置

這項認證會附加至應用程式使用 Firebase AI Logic SDK 發出的每項要求。強制執行 App Check 時,系統會拒絕來自不具備有效驗證的用戶端要求,以及來自您未授權應用程式或平台的要求。

設定 App Check 時,請考慮新增重放攻擊防護機制,讓 App Check 權杖只能使用一次。這個選項提供的保護功能比基本保護更進階,可讓您為應用程式和用途設定適當的保護等級。

如要瞭解 App Check 的詳細資訊,請參閱相關 文件,包括驗證供應商的說明,以及任何 適用的配額和限制

設定「App Check

以下操作說明經過最佳化,可協助您為 Firebase AI Logic 設定 Firebase App Check 強制執行。

步驟 1:強制執行 App Check

2026 年 7 月初起,在Firebase管理中心的引導式設定工作流程中,Firebase 會自動強制執行 Firebase App CheckFirebase AI Logic,協助保護 Gemini API

不過,如果您在 2026 年 7 月初之前,已在 Firebase 專案中設定 Firebase AI Logic (或因其他原因未強制執行 App Check),則可按照下列操作說明自行強制執行 App Check

  1. 檢查 App Check 是否已對 Firebase AI Logic 強制執行。

    1. Firebase 控制台中,依序前往「安全性」 >「App Check」 >「API」分頁標籤

    2. 找出 Firebase AI Logic 的資料列。如果顯示 Unenforced,請繼續按照這些說明操作。

  2. 按一下 Firebase AI Logic 的資料列,即可查看指標圖表。 點按這些圖表下方的「設定」

  3. 在對話方塊的第一個畫面 (「基準保護」) 中,選取「強制執行」,然後按一下「繼續」

  4. 在下一個畫面 (「重播保護」) 中,選取「已停用」,然後按一下「繼續」

  5. 在最後的畫面上,請詳閱強制執行 App Check 的注意事項,確認您已準備好強制執行 App Check。準備就緒後,按一下「繼續」

    如果您只想強制執行 App Check,並在預先發布的應用程式中使用 Firebase AI Logic 的偵錯供應商,則不需要註冊應用程式。不過,當您準備向使用者發布應用程式時,就必須註冊應用程式,才能設定正式版認證供應商 (例如 App Attest、Play Integrity 或 reCAPTCHA Enterprise)。

步驟 2:為本機開發設定偵錯供應商

如果是本機開發,您可以設定 App Check 偵錯服務,並繼續為 Firebase AI Logic 強制執行 App Check

Swift

在模擬器中以互動方式執行應用程式時 (例如在本機開發期間),請按照下列步驟使用偵錯服務:

  1. 在 Xcode 專案中,匯入 FirebaseAppCheck 並在設定 Firebase ,使用偵錯供應商工廠初始化 App Check

    import SwiftUI
    import FirebaseCore
    import FirebaseAppCheck
    
    @main
    struct YourApp: App {
      init() {
        let providerFactory = AppCheckDebugProviderFactory()
        AppCheck.setAppCheckProviderFactory(providerFactory)
        FirebaseApp.configure()
      }
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
    
  2. 取得偵錯權杖:

    1. 在模擬器或測試裝置上啟動應用程式。

    2. 開啟 Xcode 控制台,然後尋找App Check偵錯權杖。 例如:

      <Warning> [AppCheckCore][I-GAC004001] App Check debug token: '123a4567-b89c-12d3-e456-789012345678'.
      
    3. 複製權杖 (例如 123a4567-b89c-12d3-e456-789012345678)。

  3. App Check 註冊偵錯權杖:

    1. Firebase 控制台中,依序前往「Security」(安全性) >「App Check」 >「Apps」(應用程式) 分頁標籤

    2. 找出您的應用程式,按一下溢位選單 (),然後選取「管理偵錯權杖」

    3. 按照畫面上的指示註冊偵錯權杖。

如要進一步瞭解偵錯服務 (包括如何取得新的偵錯權杖),請參閱官方 App Check 文件

Kotlin

以下說明如何在模擬器中以互動方式執行應用程式時使用偵錯供應器 (例如在本機開發期間):

  1. 在偵錯版本中,將 App Check 設定為使用偵錯服務工廠:

    Firebase.initialize(context = this)
    Firebase.appCheck.installAppCheckProviderFactory(
        DebugAppCheckProviderFactory.getInstance(),
    )
  2. 取得偵錯權杖:

    1. 在模擬器或測試裝置上執行應用程式。

    2. 在記錄中尋找 App Check 偵錯權杖。例如:

      D DebugAppCheckProvider: Enter this debug secret into the allow list
      in the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678
      
    3. 複製權杖 (例如 123a4567-b89c-12d3-e456-789012345678)。

  3. App Check 註冊偵錯權杖:

    1. Firebase 控制台中,依序前往「Security」(安全性) >「App Check」 >「Apps」(應用程式) 分頁標籤

    2. 找出您的應用程式,按一下溢位選單 (),然後選取「管理偵錯權杖」

    3. 按照畫面上的指示註冊偵錯權杖。

如要進一步瞭解偵錯服務 (包括如何取得新的偵錯權杖),請參閱官方 App Check 文件

Java

以下說明如何在模擬器中以互動方式執行應用程式時使用偵錯供應器 (例如在本機開發期間):

  1. 在偵錯版本中,將 App Check 設定為使用偵錯服務工廠:

    FirebaseApp.initializeApp(/*context=*/ this);
    FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
    firebaseAppCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance());
  2. 取得偵錯權杖:

    1. 在模擬器或測試裝置上執行應用程式。

    2. 在記錄中尋找 App Check 偵錯權杖。例如:

      D DebugAppCheckProvider: Enter this debug secret into the allow list
      in the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678
      
    3. 複製權杖 (例如 123a4567-b89c-12d3-e456-789012345678)。

  3. App Check 註冊偵錯權杖:

    1. Firebase 控制台中,依序前往「Security」(安全性) >「App Check」 >「Apps」(應用程式) 分頁標籤

    2. 找出您的應用程式,按一下溢位選單 (),然後選取「管理偵錯權杖」

    3. 按照畫面上的指示註冊偵錯權杖。

如要進一步瞭解偵錯服務 (包括如何取得新的偵錯權杖),請參閱官方 App Check 文件

Web

以下說明如何從 localhost 互動式執行應用程式時 (例如在本機開發期間),使用偵錯服務:

  1. 在偵錯版本中,請先將 self.FIREBASE_APPCHECK_DEBUG_TOKEN 設為 true,再初始化 App Check,即可啟用偵錯模式。例如:

    self.FIREBASE_APPCHECK_DEBUG_TOKEN = true;
    initializeAppCheck(app, { /* App Check options */ });
    
  2. 在本地端造訪網頁應用程式,然後開啟瀏覽器的開發人員工具。在偵錯控制台中,您會看到偵錯權杖:

    AppCheck debug token: "123a4567-b89c-12d3-e456-789012345678".
    You will need to safelist it in the Firebase console for it to work.
    
  3. App Check 註冊偵錯權杖:

    1. Firebase 控制台中,依序前往「Security」(安全性) >「App Check」 >「Apps」(應用程式) 分頁標籤

    2. 找出您的應用程式,按一下溢位選單 (),然後選取「管理偵錯權杖」

    3. 按照畫面上的指示註冊偵錯權杖。

如要進一步瞭解偵錯服務 (包括如何取得新的偵錯權杖),請參閱官方 App Check 文件

Dart

iOS+

在模擬器中以互動方式執行應用程式時 (例如在本機開發期間),請按照下列步驟使用偵錯服務:

  1. 在初始化 Firebase 應用程式後,立即使用偵錯服務啟動 App Check

    import 'package:flutter/material.dart';
    import 'package:firebase_core/firebase_core.dart';
    
    // Import the firebase_app_check plugin
    import 'package:firebase_app_check/firebase_app_check.dart';
    
    Future<void> main() async {
      WidgetsFlutterBinding.ensureInitialized();
      await Firebase.initializeApp();
      await FirebaseAppCheck.instance.activate(
        // Set appleProvider to `AppleProvider.debug`
        appleProvider: AppleProvider.debug,
      );
      runApp(App());
    }
    
  2. 在 Xcode 專案中啟用偵錯記錄功能:

    1. 開啟「Product」>「Scheme」>「Edit scheme」
    2. 在左選單中選取「Run」,然後選取「Arguments」分頁標籤。
    3. 在「Arguments Passed on Launch」部分中,加入 -FIRDebugEnabled
  3. 取得偵錯權杖:

    1. 使用 Xcode 開啟 ios/Runner.xcworkspace,然後在模擬器或測試裝置上執行應用程式。

    2. 開啟 Xcode 控制台,然後尋找App Check偵錯權杖。 例如:

      <Warning> [AppCheckCore][I-GAC004001] App Check debug token: '123a4567-b89c-12d3-e456-789012345678'.
      
    3. 複製權杖 (例如 123a4567-b89c-12d3-e456-789012345678)。

  4. App Check 註冊偵錯權杖:

    1. Firebase 控制台中,依序前往「Security」(安全性) >「App Check」 >「Apps」(應用程式) 分頁標籤

    2. 找出您的應用程式,按一下溢位選單 (),然後選取「管理偵錯權杖」

    3. 按照畫面上的指示註冊偵錯權杖。

Android

以下說明如何在模擬器中以互動方式執行應用程式時使用偵錯供應器 (例如在本機開發期間):

  1. 初始化 Firebase 應用程式後,請立即使用偵錯服務啟動 App Check

    import 'package:flutter/material.dart';
    import 'package:firebase_core/firebase_core.dart';
    
    // Import the firebase_app_check plugin
    import 'package:firebase_app_check/firebase_app_check.dart';
    
    Future<void> main() async {
      WidgetsFlutterBinding.ensureInitialized();
      await Firebase.initializeApp();
      await FirebaseAppCheck.instance.activate(
        // Set androidProvider to `AndroidProvider.debug`
        androidProvider: AndroidProvider.debug,
      );
      runApp(App());
    }
    
  2. 取得偵錯權杖:

    1. 在模擬器或測試裝置上執行應用程式。

    2. 在記錄中尋找 App Check 偵錯權杖。例如:

      D DebugAppCheckProvider: Enter this debug secret into the allow list
      in the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678
      
    3. 複製權杖 (例如 123a4567-b89c-12d3-e456-789012345678)。

  3. App Check 註冊偵錯權杖:

    1. Firebase 控制台中,依序前往「Security」(安全性) >「App Check」 >「Apps」(應用程式) 分頁標籤

    2. 找出您的應用程式,按一下溢位選單 (),然後選取「管理偵錯權杖」

    3. 按照畫面上的指示註冊偵錯權杖。

網頁版

以下說明如何從 localhost 互動式執行應用程式時 (例如在本機開發期間),使用偵錯服務:

  1. web/index.html 檔案中,將 self.FIREBASE_APPCHECK_DEBUG_TOKEN 設為 true,即可啟用偵錯模式:

    <body>
      <script>
        self.FIREBASE_APPCHECK_DEBUG_TOKEN = true;
      </script>
    
      ...
    
    </body>
    
  2. 在本機執行網頁應用程式,然後開啟瀏覽器的開發人員工具。在偵錯控制台中,您會看到偵錯權杖:

    AppCheck debug token: "123a4567-b89c-12d3-e456-789012345678".
    You will need to safelist it in the Firebase console for it to work.
    

    這個權杖會儲存在本機瀏覽器中,只要您在同一部電腦上使用同一個瀏覽器,系統就會使用這個權杖。如要在其他瀏覽器或其他電腦上使用權杖,請將 self.FIREBASE_APPCHECK_DEBUG_TOKEN 設為權杖字串,而非 true

  3. App Check 註冊偵錯權杖:

    1. Firebase 控制台中,依序前往「Security」(安全性) >「App Check」 >「Apps」(應用程式) 分頁標籤

    2. 找出您的應用程式,按一下溢位選單 (),然後選取「管理偵錯權杖」

    3. 按照畫面上的指示註冊偵錯權杖。

如要進一步瞭解偵錯服務 (包括如何取得新的偵錯權杖),請參閱官方 App Check 文件

Unity

以下說明如何在模擬器中以互動方式執行應用程式時使用偵錯供應器 (例如在本機開發期間):

  1. Firebase 控制台中建立偵錯權杖:

    1. Firebase 控制台中,依序前往「Security」(安全性) >「App Check」 > 「Apps」(應用程式) 分頁標籤

    2. 找出您的應用程式,按一下溢位選單 (),然後選取「管理偵錯權杖」

    3. 按照畫面上的指示建立新的偵錯權杖。

  2. 在應用程式的初始化程式碼中,加入下列內容:

    using Firebase.AppCheck;
    
    void InitializeFirebase() {
      // Configure the Debug Provider factory with your debug token.
      DebugAppCheckProviderFactory.Instance.SetDebugToken("YOUR_DEBUG_TOKEN");
    
      // Set App Check to use the debug provider factory
      FirebaseAppCheck.SetAppCheckProviderFactory(
        DebugAppCheckProviderFactory.Instance);
    
      // Proceed to initialize Firebase as normal
    }
    

如要進一步瞭解偵錯服務 (包括如何取得新的偵錯權杖),請參閱官方 App Check 文件

步驟 3:為使用者和正式環境設定 App Check

準備好向使用者發布應用程式時,請註冊應用程式並設定正式版認證供應商 (例如 App Attest、Play Integrity 或 reCAPTCHA Enterprise)。

  1. 選擇生產認證供應商,然後按照下列連結中的實作說明操作:

    請注意,如果這些認證供應商都無法滿足您的需求,您可以實作自訂供應商,使用第三方認證供應商或您自己的認證技術。

  2. (建議) 新增重送攻擊防護機制,進一步提升防護力,也就是 App Check 權杖只能使用一次。

新增重播防護功能,提升保護力

建議使用最新版 SDK,但請務必使用下列其中一個版本,才能啟用重播保護機制:
Apple 平台 v12.2.0 以上版本 | Android BoM v34.14.0 以上版本 (App Check v19.1.0 以上版本) | 網頁 v12.14.0 以上版本 | Flutter v4.15.0 以上版本 (App Check v4.10.0 以上版本) | Unity v13.12.0 以上版本

根據預設,App Check 會使用工作階段權杖,這類權杖的存留時間 (TTL) 可設定為 30 分鐘7 天。這些工作階段權杖會由 App Check SDK 緩存,並隨應用程式的要求一併傳送,在 TTL 到期前可重複使用。使用工作階段權杖屬於基本保護措施

不過,您可以強制執行重放攻擊防護機制,改用限次使用權杖,進一步提升保護力。強制執行重放攻擊防護機制時,會發生下列情況:

  • App Check 會封鎖對 Firebase AI Logic 的要求,這些要求使用工作階段權杖。而是App Check只會允許要求使用新核發的有限使用權杖,才能Firebase AI Logic

  • 驗證有限用途權杖後,系統會耗用該權杖,因此權杖只能使用一次,可防範重放攻擊。

  • App Check SDK 會為每個要求產生新的限時使用權杖。 請注意,這個程序可能會增加延遲時間,有時還會產生費用 (視認證服務供應商而定),進而影響要求。

設定及強制執行重放攻擊防護機制

按一下 Gemini API 供應商,即可在這個頁面查看供應商專屬內容和程式碼。

以下說明如何設定及強制執行重播保護措施:

  1. 如果尚未設定 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(
      useLimitedUseAppCheckTokens: true,
    );
    
    // ...
    
    

    Unity

    // ...
    
    // During instantiation, enable usage of limited-use tokens
    var ai = FirebaseAI.GetInstance(
      useLimitedUseAppCheckTokens: true
    );
    
    // ...
    
  3. 強制執行重放攻擊防護機制。

    1. 在應用程式的程式碼集,請務必啟用使用次數受限的權杖 (請參閱上一個步驟)。

    2. Firebase 控制台中,依序點選「Security」(安全性) >「App Check」

    3. 展開 Firebase AI Logic 的指標檢視畫面。

    4. 確認「基本保護」強制執行,然後按一下「繼續」

    5. 如要保護裝置免於重播攻擊,請選擇「Unenforced (monitoring only)」(未強制執行 (僅限監控)) 或「Enforced」(強制執行)

      請考量下列事項,決定何時要強制執行重播保護機制:

      • 如果大量使用者可能使用未啟用受限制用途權杖的舊版應用程式,建議您監控要求。如果您立即強制執行重播防護措施,系統就會封鎖這些使用者的要求。

      • 您可以特別監控「未驗證:重複使用的權杖」指標,這項指標代表要求中含有先前要求已使用的權杖。在 Firebase 控制台中監控這項指標 (依序前往「安全性」 >「App Check」 >「API」分頁標籤)。

        如果近期有大量要求屬於這類,建議您先不要強制執行重播保護機制,以免打擾使用者。等更多使用者更新至使用有限使用權杖的應用程式版本後,再強制執行這項機制。

瞭解 Firebase AI Logic 如何與 App Check 整合

如要使用 Firebase AI Logic SDK,必須在 Firebase 專案中啟用 Firebase AI Logic API (firebasevertexai.googleapis.com)。這是因為 Firebase AI Logic SDK 發出的要求會先傳送至 Firebase AI Logic 伺服器,該伺服器會做為 Proxy 閘道,在要求獲准繼續前往所選「Gemini API」供應商的後端和 API,以存取 GeminiImagen 模型「之前」進行 Firebase App Check 驗證。

常見問題與疑難排解

如需其他 Firebase AI Logic 相關常見問題和疑難排解資訊,請參閱這篇文章,如需錯誤代碼,請參閱這篇文章