AndroidでPlayIntegrityを使用してアプリチェックを有効にする

このページでは、組み込みのPlay Integrityプロバイダーを使用して、Androidアプリでアプリチェックを有効にする方法を示します。アプリチェックを有効にすると、アプリのみがプロジェクトのFirebaseリソースにアクセスできるようになります。この機能の概要を参照してください。

現在、組み込みのPlay Integrityプロバイダーは、GooglePlayが配布するAndroidアプリのみをサポートしています。 Play Integrityのオフプレイ機能を使用する場合、または独自のカスタムプロバイダーでApp Checkを使用する場合は、「カスタムAppCheckプロバイダーの実装」を参照してください。

1.Firebaseプロジェクトを設定します

  1. まだ追加していない場合は、AndroidプロジェクトにFirebaseを追加します

  2. PlayIntegrityAPIを有効にします。

    1. Google Play Consoleでアプリを選択するか、まだ追加していない場合は追加します。

    2. [リリース]セクションで、[設定]>[アプリの整合性]をクリックします。

    3. [ Integrity API ]ページで、[プロジェクトのリンク]をクリックし、GoogleCloudプロジェクトのリストからFirebaseプロジェクトを選択します。

      ここで選択するプロジェクトは、アプリを登録するプロジェクトと同じFirebaseプロジェクトである必要があります(次の手順を参照)。

  3. Firebaseコンソールの[アプリチェック]セクションで、PlayIntegrityプロバイダーにアプリチェックを使用するようにアプリを登録します。アプリの署名証明書のSHA-256フィンガープリントを提供する必要があります。

    Firebase製品の適用を有効にすると、登録済みのアプリのみが製品のバックエンドリソースにアクセスできるようになるため、通常はプロジェクトのすべてのアプリを登録する必要があります。

  4. オプション:アプリ登録設定で、プロバイダーによって発行されたアプリチェックトークンのカスタム存続時間(TTL)を設定します。 TTLは30分から7日の間の任意の値に設定できます。この値を変更するときは、次のトレードオフに注意してください。

    • セキュリティ:TTLを短くすると、リークまたはインターセプトされたトークンが攻撃者によって悪用される可能性のあるウィンドウが減少するため、セキュリティが強化されます。
    • パフォーマンス:TTLが短いほど、アプリはより頻繁に認証を実行します。アプリの認証プロセスは、実行されるたびにネットワークリクエストにレイテンシを追加するため、TTLが短いとアプリのパフォーマンスに影響を与える可能性があります。
    • クォータとコスト:TTLが短く、再認証が頻繁に行われると、クォータがより早く使い果たされます。有料サービスの場合は、コストが高くなる可能性があります。割り当てと制限を参照してください。

    ほとんどのアプリでは、デフォルトのTTLである1時間が妥当です。 App Checkライブラリは、TTL期間の約半分でトークンを更新することに注意してください。

2.アプリチェックライブラリをアプリに追加します

Firebase Android BoMを使用して、モジュール(アプリレベル)のGradleファイル(通常はapp/build.gradle )でAppCheckAndroidライブラリの依存関係を宣言します。

Java

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:30.3.1')

    // Declare the dependency for the App Check library
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-appcheck-playintegrity'
}

Firebase Android BoMを使用することで、アプリは常に互換性のあるバージョンのFirebaseAndroidライブラリを使用します。

(代替) BoMを使用せずにFirebaseライブラリの依存関係を宣言する

Firebase BoMを使用しない場合は、依存関係の行で各Firebaseライブラリのバージョンを指定する必要があります。

アプリで複数のFirebaseライブラリを使用する場合は、BoMを使用してライブラリのバージョンを管理することを強くお勧めします。これにより、すべてのバージョンに互換性が確保されます。

dependencies {
    // Declare the dependency for the App Check library
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-appcheck-playintegrity:16.0.0'
}

Kotlin+KTX

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:30.3.1')

    // Declare the dependency for the App Check library
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-appcheck-playintegrity'
}

Firebase Android BoMを使用することで、アプリは常に互換性のあるバージョンのFirebaseAndroidライブラリを使用します。

(代替) BoMを使用せずにFirebaseライブラリの依存関係を宣言する

Firebase BoMを使用しない場合は、依存関係の行で各Firebaseライブラリのバージョンを指定する必要があります。

アプリで複数のFirebaseライブラリを使用する場合は、BoMを使用してライブラリのバージョンを管理することを強くお勧めします。これにより、すべてのバージョンに互換性が確保されます。

dependencies {
    // Declare the dependency for the App Check library
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-appcheck-playintegrity:16.0.0'
}

3.アプリチェックを初期化します

次の初期化コードをアプリに追加して、他のFirebaseSDKを使用する前に実行されるようにします。

Java

FirebaseApp.initializeApp(/*context=*/ this);
FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
firebaseAppCheck.installAppCheckProviderFactory(
        PlayIntegrityAppCheckProviderFactory.getInstance());

Kotlin+KTX

FirebaseApp.initializeApp(/*context=*/this)
val firebaseAppCheck = FirebaseAppCheck.getInstance()
firebaseAppCheck.installAppCheckProviderFactory(
    PlayIntegrityAppCheckProviderFactory.getInstance()
)

App Checkライブラリがアプリにインストールされたら、更新されたアプリのユーザーへの配布を開始します。

更新されたクライアントアプリは、Firebaseへのすべてのリクエストとともにアプリチェックトークンの送信を開始しますが、Firebase製品では、Firebaseコンソールの[アプリチェック]セクションで適用を有効にするまで、トークンが有効である必要はありません。詳細については、次の2つのセクションを参照してください。

4.リクエストの指標を監視する

更新されたアプリがユーザーの手に渡ったので、使用しているFirebase製品に対してアプリチェックの実施を有効にできます。ただし、そうする前に、そうすることで既存の正当なユーザーを混乱させないことを確認する必要があります。

リアルタイムデータベース、Cloud Firestore、およびCloud Storage

Realtime Database、Cloud Firestore、およびCloud Storageでこの決定を行うために使用できる重要なツールは、アプリチェックリクエストの指標画面です。

製品のアプリチェックリクエストの指標を表示するには、Firebaseコンソールのアプリチェックセクションを開きます。例えば:

アプリチェックメトリックページのスクリーンショット

各製品のリクエストメトリックは、次の4つのカテゴリに分類されます。

  • 確認済みのリクエストとは、有効なアプリチェックトークンを持つリクエストです。アプリチェックの実施を有効にすると、このカテゴリのリクエストのみが成功します。

  • 古いクライアントリクエストとは、アプリチェックトークンがないリクエストです。これらのリクエストは、アプリチェックがアプリに含まれる前の古いバージョンのFirebaseSDKからのものである可能性があります。

  • 不明な発信​​元のリクエストとは、App Checkトークンが欠落していて、FirebaseSDKからのものではないように見えるリクエストです。これらは、盗まれたAPIキーを使用して行われたリクエスト、またはFirebaseSDKを使用せずに行われた偽造されたリクエストからのものである可能性があります。

  • 無効なリクエストとは、無効なアプリチェックトークンを持つリクエストです。これは、アプリを偽装しようとしている不正なクライアントからのものか、エミュレートされた環境からのものである可能性があります。

アプリのこれらのカテゴリの分布は、施行を有効にすることを決定したときに通知する必要があります。ここにいくつかのガイドラインがあります:

  • 最近のリクエストのほとんどすべてが検証済みのクライアントからのものである場合は、施行を有効にしてバックエンドリソースの保護を開始することを検討してください。

  • 最近のリクエストの大部分が古いクライアントからのものである場合は、ユーザーの混乱を避けるために、強制を有効にする前に、より多くのユーザーがアプリを更新するのを待つことを検討してください。リリースされたアプリにAppCheckを適用すると、AppCheckSDKと統合されていない以前のアプリバージョンが破損します。

  • アプリがまだ起動していない場合は、使用中の古いクライアントがないため、すぐにアプリチェックの適用を有効にする必要があります。

クラウド機能

Cloud Functionsの場合、関数のログを調べることでアプリチェックの指標を取得できます。呼び出し可能な関数を呼び出すたびに、次の例のような構造化されたログエントリが出力されます。

{
  "severity": "INFO",    // INFO, WARNING, or ERROR
  "logging.googleapis.com/labels": {"firebase-log-type": "callable-request-verification"},
  "jsonPayload": {
    "message": "Callable header verifications passed.",
    "verifications": {
      // ...
      "app": "MISSING",  // VALID, INVALID, or MISSING
    }
  }
}

次の指標フィルターを使用してログベースのカウンター指標を作成することで、GoogleCloudConsoleでこれらの指標を分析できます。

resource.type="cloud_function"
resource.labels.function_name="YOUR_CLOUD_FUNCTION"
resource.labels.region="us-central1"
labels.firebase-log-type="callable-request-verification"

フィールドjsonPayload.verifications.appCheckを使用してメトリックにラベルを付けます。

5.施行を有効にする

施行を有効にするには、以下の各製品の指示に従ってください。製品の施行を有効にすると、その製品に対する未確認のリクエストはすべて拒否されます。

リアルタイムデータベース、Cloud Firestore、およびCloud Storage

Realtime Database、Cloud Firestore(iOSおよびAndroid)、およびCloud Storageの適用を有効にするには:

  1. Firebaseコンソールの[アプリチェック]セクションを開きます。

  2. 施行を有効にする製品のメトリックビューを展開します。

  3. [強制]をクリックして、選択を確認します。

施行を有効にしてから有効になるまで、最大15分かかる場合があることに注意してください。

クラウド機能

クラウド機能のアプリチェックの実施を有効にするを参照してください。

次のステップ

App Checkにアプリを登録した後、開発中のエミュレーターなど、App Checkが通常は有効と分類されない環境で、または継続的インテグレーション(CI)環境からアプリを実行する場合は、次のことができます。実際の認証プロバイダーの代わりにAppCheckデバッグプロバイダーを使用するアプリのデバッグビルドを作成します。

Androidのデバッグプロバイダーでアプリチェックを使用するを参照してください。