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 Logic に App Check が適用されると、Gemini Developer API と Agent Platform Gemini API (formerly Vertex AI) の両方を保護できます。

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


App Check の仕組みの概要

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

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

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

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

App Check の詳細情報については、ドキュメントをご覧ください。これには、構成証明プロバイダの説明や、該当する割り当てと上限が含まれます。

App Checkを設定

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

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

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

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

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

    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 コンソールで、[セキュリティ] > [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_TOKEN を true に設定して、デバッグモードを有効にします。例:

    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_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 コンソールで、[セキュリティ] > [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 以降)| ウェブ 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 へのリクエストを許可します。

  • 使用回数制限付きトークンが検証されると、トークンは使用済みにされ、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 Logic と App Check の統合方法を理解する

Firebase AI Logic SDK を使用するには、Firebase プロジェクトで Firebase AI Logic API(firebasevertexai.googleapis.com)を有効にする必要があります。これは、Firebase AI Logic SDK からのリクエストがまず Firebase AI Logic サーバーに送信されるためです。このサーバーはプロキシ ゲートウェイとして機能し、リクエストが Gemini API に進んで Gemini モデルにアクセスする前に、Firebase App Check の検証が行われます。

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

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