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

直接從行動或網頁應用程式呼叫 API 時 (例如允許存取生成式 AI 模型的 API),API 容易遭到未經授權的用戶端濫用。為保護這些 API 免於遭到濫用,您可以透過 Firebase App Check 驗證所有傳入的 API 呼叫是否來自實際應用程式和未經竄改的裝置。

Firebase AI Logic 提供 Proxy 閘道,可讓您與 Firebase App Check 整合,並保護行動應用程式和網頁應用程式呼叫的生成式 AI 模型 API。搭配 App Check 使用 Firebase AI Logic SDK 時,支援所有設定:

  • 保護「Gemini API」供應商:Gemini Developer APIVertex AI Gemini API

  • 保護所有支援的模型,包括 Gemini 模型和 Imagen 模型。

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

App Check 運作方式的概要總覽

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

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

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

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

如要瞭解 App Check 的詳細資訊,包括配額和限制,請參閱相關文件。

設定「App Check

App Check 說明文件詳細說明瞭驗證供應商,以及詳細的實作說明。

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

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

  2. (必要) 啟用 App Check 強制執行 再將應用程式提交至公開可用的原始碼控管系統、分享應用程式,或公開發布應用程式。

  3. (建議) 新增重送攻擊防護,進一步提升防護力,也就是 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,並為應用程式啟用 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 驗證。