Firebase App Check を実装して、不正なクライアントから API を保護する

モバイルアプリやウェブアプリから API を直接呼び出す場合(生成 AI モデルへのアクセスを許可する API など)、API は不正なクライアントによる不正使用に対して脆弱になります。これらの API を保護するために、Firebase App Check を使用して、すべての受信 API 呼び出しが実際のアプリからのものであることを確認できます。

Firebase AI Logic は、Firebase App Check と統合し、モバイルアプリとウェブアプリから呼び出される生成 AI モデル API を保護できるプロキシ ゲートウェイを提供します。Firebase AI Logic SDK で App Check を使用すると、すべての構成がサポートされます。

  • Gemini Developer APIVertex AI Gemini API の両方の「Gemini API」プロバイダを保護します。

  • Gemini モデルと Imagen モデルの両方を含む、サポートされているすべてのモデルを保護します。

App Check の仕組みの概要

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

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

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

App Check を設定する際は、今後の保護強化に備える(リプレイ保護とも呼ばれます)ことをおすすめします。

App Check の詳細割り当てと上限など)については、ドキュメントをご覧ください。

利用可能なプロバイダと実装手順

App Check ドキュメントには、構成証明プロバイダの説明と実装手順が記載されています。

  1. デフォルトのプロバイダを選択し、次のリンクにある実装手順に沿って操作します。

    デフォルトのプロバイダでは要件を満たすことができない場合は、サードパーティの証明書プロバイダまたは独自の証明手法を使用するカスタム プロバイダを実装できます。

  2. (推奨) App Check による今後の保護強化(リプレイ保護とも呼ばれます)に備えます。

  3. (必須)アプリを実際のユーザーにリリースする前に、App Check の適用を有効にします。

Flutter で必要な特別なインスタンス化

Gemini API プロバイダをクリックして、このページでプロバイダ固有のコンテンツとコードを表示します。

Flutter アプリで Firebase AI Logic とともに App Check を使用する場合は、次のように、インスタンス化時に 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 以降)、ウェブ(v12.3.0 以降)でのみ使用できます。
他のプラットフォームのサポートは、今後数週間以内にリリースされる予定です。

デフォルトでは、App Checkセッション トークンを使用します。このトークンには、30 分から 7 日までの範囲で構成可能な有効期間(TTL)があります。これらのセッション トークンは 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

    Flutter アプリでの限定使用トークンの使用は、今後のリリースでサポートされる予定です。しばらくお待ちください。

    Unity

    Unity ゲームでの 1 回限りのトークンの使用は、今後のリリースでサポートされる予定です。しばらくお待ちください。

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 検証が行われるプロキシ ゲートウェイとして機能します。