Firebase App Check で Gemini API の不正使用を防止する

モバイルアプリやウェブアプリから API を直接呼び出すと、API が不正なクライアントによる不正使用に対して脆弱になります。モバイルアプリまたはウェブアプリから Gemini API を直接呼び出す場合は、Firebase AI Logic を使用して不正使用から保護し、Firebase App Check を適用する必要があります。App Check を適用すると、実際のアプリまたは改ざんされていないデバイスからのリクエストであることが確認された受信リクエストのみが許可されます。

設定手順に移動

Firebase AI Logic は、Firebase App Check と統合し、モバイルアプリとウェブアプリから直接呼び出されたときに Gemini API を保護できるプロキシ ゲートウェイを提供します。Firebase AI LogicApp Check が適用されると、Gemini Developer APIAgent Platform Gemini API (formerly Vertex AI) の両方を保護できます。

Firebase AI LogicApp Check は、リプレイ保護もサポートしています。つまり、App Check トークンは 1 回しか使用できません。


App Check の仕組みの概要

App Check を使用すると、アプリを実行しているデバイスでアプリまたはデバイスの証明書プロバイダを使用して、次のいずれか、または両方であることを確認できます。

  • 正規のアプリから送信されたリクエストであること
  • 正規の未改造のデバイスから送信されたリクエストであること

この証明書は、アプリが Firebase AI Logic SDK を使用して送信するすべてのリクエストに添付されます。App Check が適用されると、承認していないアプリまたはプラットフォームからのリクエストと同様に、有効な証明書がないクライアントからのリクエストは拒否されます。

App Check を設定する際は、リプレイ保護の追加を検討してください。これにより、App Check トークンが一度限りの使用になります。このオプションでは、ベースライン保護を超える保護が提供され、アプリとユースケースに適した保護レベルを設定できます。

App Check の詳細については、そのドキュメントをご覧ください。証明書プロバイダの説明や、適用可能な割り当てと上限などが記載されています。

App Checkを設定

次の手順は、Firebase AI LogicFirebase App Check 適用を設定するために最適化されています。

ステップ 1: App Check を適用する

2026 年 7 月上旬より、Firebase コンソールのガイド付き設定ワークフローで、Firebase は Firebase AI Logic に対して Firebase App Check を自動的に適用し、Gemini API の保護を支援します。

ただし、2026 年 7 月上旬より前に Firebase プロジェクトで Firebase AI Logic をすでに設定している場合(または、他の理由で App Check が適用されていない場合)は、次の手順に沿って App Check を自分で適用できます。

  1. Firebase AI LogicApp Check がすでに適用されているかどうかを確認します。

    1. Firebase コンソールで、[セキュリティ] > [App Check] > [API] タブに移動します。

    2. Firebase AI Logic の行を見つけます。Unenforced と表示された場合は、この手順の残りの部分に進みます。

  2. Firebase AI Logic の行をクリックすると、指標グラフが表示されます。グラフの下にある [設定] をクリックします。

  3. ダイアログの最初の画面([ベースライン保護])で、[適用] を選択し、[続行] をクリックします。

  4. 次の画面([Replay protection])で [Disabled] を選択し、[Continue] をクリックします。

  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 プロジェクトで、Firebase を構成する前に FirebaseAppCheck をインポートし、デバッグ プロバイダの Factory を使用して 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 コンソールで、[セキュリティ] > [App Check] > [アプリ] タブに移動します。

    2. アプリを見つけて、オーバーフロー メニュー()をクリックし、[デバッグ トークンを管理] を選択します。

    3. 画面上の手順に沿ってデバッグ トークンを登録します。

デバッグ プロバイダの詳細(新しいデバッグ トークンを取得する方法など)については、App Check の公式ドキュメントをご覧ください。

Kotlin

エミュレータでインタラクティブにアプリを実行しているときに(ローカル開発中など)デバッグ プロバイダを使用するには、次の手順を行います。

  1. デバッグビルドで、デバッグ プロバイダ Factory を使用するように 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 コンソールで、[セキュリティ] > [App Check] > [アプリ] タブに移動します。

    2. アプリを見つけて、オーバーフロー メニュー()をクリックし、[デバッグ トークンを管理] を選択します。

    3. 画面上の手順に沿ってデバッグ トークンを登録します。

デバッグ プロバイダの詳細(新しいデバッグ トークンを取得する方法など)については、App Check の公式ドキュメントをご覧ください。

Java

エミュレータでインタラクティブにアプリを実行しているときに(ローカル開発中など)デバッグ プロバイダを使用するには、次の手順を行います。

  1. デバッグビルドで、デバッグ プロバイダ Factory を使用するように 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 コンソールで、[セキュリティ] > [App Check] > [アプリ] タブに移動します。

    2. アプリを見つけて、オーバーフロー メニュー()をクリックし、[デバッグ トークンを管理] を選択します。

    3. 画面上の手順に沿ってデバッグ トークンを登録します。

デバッグ プロバイダの詳細(新しいデバッグ トークンを取得する方法など)については、App Check の公式ドキュメントをご覧ください。

Web

localhost からインタラクティブにアプリを実行しているときに(ローカル開発中など)、デバッグ プロバイダを使用する方法は次のとおりです。

  1. App Check を初期化する前に、デバッグビルドで self.FIREBASE_APPCHECK_DEBUG_TOKENtrue に設定して、デバッグモードを有効にします。例:

    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 コンソールで、[セキュリティ] > [App Check] > [アプリ] タブに移動します。

    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 コンソールで、[セキュリティ] > [App Check] > [アプリ] タブに移動します。

    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 コンソールで、[セキュリティ] > [App Check] > [アプリ] タブに移動します。

    2. アプリを見つけて、オーバーフロー メニュー()をクリックし、[デバッグ トークンを管理] を選択します。

    3. 画面上の手順に沿ってデバッグ トークンを登録します。

Web

localhost からインタラクティブにアプリを実行しているときに(ローカル開発中など)デバッグ プロバイダを使用する方法は次のとおりです。

  1. ファイル web/index.html で、self.FIREBASE_APPCHECK_DEBUG_TOKENtrue に設定してデバッグモードを有効にします。

    <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_TOKENtrue ではなくトークン文字列に設定します。

  3. デバッグ トークンを App Check に登録します。

    1. Firebase コンソールで、[セキュリティ] > [App Check] > [アプリ] タブに移動します。

    2. アプリを見つけて、オーバーフロー メニュー()をクリックし、[デバッグ トークンを管理] を選択します。

    3. 画面上の手順に沿ってデバッグ トークンを登録します。

デバッグ プロバイダの詳細(新しいデバッグ トークンを取得する方法など)については、App Check の公式ドキュメントをご覧ください。

Unity

エミュレータでインタラクティブにアプリを実行しているときに(ローカル開発中など)デバッグ プロバイダを使用するには、次の手順を行います。

  1. Firebase コンソールで、デバッグ トークンを作成します。

    1. Firebase コンソールで、[セキュリティ] > [App Check] > [アプリ] タブに移動します。

    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 トークンは 1 回しか使用できません。

リプレイ保護を追加して保護を強化する

最新の SDK バージョンを使用することをおすすめしますが、リプレイ保護を使用するには、これらのバージョンのいずれかを必ず使用してください。
Apple プラットフォーム v12.2.0 以降 | Android BoM v34.14.0 以降(App Check v19.1.0 以降)| Web v12.14.0 以降 | Flutter v4.15.0 以降(App Check v4.10.0 以降)| Unity v13.12.0 以降

デフォルトでは、App Checkセッション トークンを使用します。このトークンには、30 分から 7 日の範囲で構成可能な有効期間(TTL)があります。これらのセッション トークンは App Check SDK によってキャッシュに保存され、アプリからのリクエストとともに送信されます。また、TTL が切れるまで再利用できます。セッション トークンの使用は、ベースライン保護と見なされます。

ただし、リプレイ保護を適用することで、このベースライン保護を超えて保護を強化できます。リプレイ保護では、代わりに限定使用トークンが使用されます。リプレイ保護が適用されている場合、次の処理が行われます。

  • App Check は、セッション トークンを使用する Firebase AI Logic へのリクエストをブロックします。代わりに、App Check は、新しく生成された使用回数制限付きトークンを使用している場合にのみ、Firebase AI Logic へのリクエストを許可します。

  • 使用回数制限付きトークンが検証されると、トークンは消費され、1 回しか使用できなくなるため、リプレイ攻撃を防ぐことができます。

  • 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 コンソールで、[セキュリティ] > [App Check] に移動します。

    3. Firebase AI Logic の指標ビューを開きます。

    4. [ベースライン保護] が [適用] になっていることを確認し、[続行] をクリックします。

    5. リプレイ保護では、[適用なし(モニタリングのみ)] または [適用] を選択します。

      リプレイ保護を適用するタイミングを決定する際は、次の点を考慮してください。

      • 相当数のユーザーが、制限付き使用トークンを有効にせずにアプリの以前のバージョンを使用している可能性がある場合は、リクエストをモニタリングすることをおすすめします。リプレイ保護を直ちに適用すると、これらのユーザーからのリクエストはブロックされます。

      • 未確認: 再利用されたトークン指標をモニタリングできます。これは、以前のリクエストですでに使用されているトークンを含むリクエストの数です。この指標は Firebase コンソールでモニタリングします([セキュリティ] > [App Check] > [API] タブに移動)。

        最近のリクエストの大部分がこのカテゴリに該当する場合は、ユーザーの混乱を避けるため、より多くのユーザーが限定使用トークンを使用するバージョンのアプリに更新するまで、リプレイ保護の適用を待つことを検討してください。

Firebase AI LogicApp Check とどのように統合されるかを理解する

Firebase AI Logic SDK を使用するには、Firebase プロジェクトで Firebase AI Logic API(firebasevertexai.googleapis.comを有効にする必要があります。これは、Firebase AI Logic SDK によって行われたリクエストが最初に Firebase AI Logic サーバーに送信されるためです。このサーバーは、リクエストが選択した「Gemini API」プロバイダのバックエンドと Gemini モデルと Imagen モデルにアクセスする API に進む前に Firebase App Check 検証が行われるプロキシ ゲートウェイとして機能します。

よくある質問とトラブルシューティング

Firebase AI Logic に関連するその他のよくある質問とトラブルシューティングまたはエラーコードをご覧ください。