App Check を使用して API キーを保護する
Firebase App Check は、正規のアプリ以外のソースからのトラフィックをブロックすることで、アプリから Google Maps Platform への呼び出しを保護します。これは、Play Integrity などの証明書プロバイダからのトークンを確認することで行われます。アプリを App Check と統合すると、悪意のあるリクエストから保護されるため、不正な API 呼び出しに対して課金されることはありません。
App Check は私に適していますか?
ほとんどの場合、App Check を使用することをおすすめしますが、次のような場合は App Check は不要または対象外です。
- 元の Places SDK を使用している。App Check は Places SDK(New)でのみサポートされています 。
- 限定公開アプリまたは試験運用版アプリ。アプリが一般公開されていない場合、App Check は不要です。
- アプリがサーバー間でのみ使用される場合、App Check は不要です。ただし、GMP と通信するサーバーが一般公開クライアント(モバイルアプリなど)で使用されている場合は、GMP ではなく App Check を使用してそのサーバーを保護することを検討してください。
- App Check が推奨する証明書プロバイダは、証明書プロバイダによって侵害されている、または信頼できないと見なされたデバイスでは機能しません。このようなデバイスをサポートする必要がある場合は、カスタム証明書サービスをデプロイできます。詳細については、手順をご覧ください。
実装手順の概要
大まかに言うと、アプリを App Check と統合する手順は次のとおりです。
- Firebase をアプリに追加します。
- App Check ライブラリを追加して初期化します。
- トークン プロバイダを追加します。
- デバッグを有効にします。
- アプリのリクエストをモニタリングし、適用を決定します。
App Check と統合すると、Firebase コンソールでバックエンド トラフィックの指標を確認できます。これらの指標では、有効な App Check トークンが添付されているかどうかでリクエストが分類されます。詳細については、Firebase App Check のドキュメントをご覧ください。
ほとんどのリクエストが正規のソースからのものであり、ユーザーが App Check の実装を含む最新バージョンのアプリに更新していることを確認したら、適用を有効にできます。適用が有効になると、App Check は有効な App Check トークンがないすべてのトラフィックを拒否します。
App Check の統合を計画する際の考慮事項
統合を計画する際は、次の点に注意してください。
推奨される証明書プロバイダである Play Integrity には、Standard API の使用枠に対して 1 日あたりの呼び出し上限があります。 呼び出し上限の詳細については、Google Play Integrity デベロッパー ドキュメントのセットアップ ページをご覧ください。
カスタム証明書プロバイダを使用することもできますが、これは高度なユースケースです。詳細については、カスタム App Check プロバイダを実装するをご覧ください。
-
アプリの起動時にレイテンシが発生します。ただし、その後は、定期的な再証明がバックグラウンドで行われるため、レイテンシは発生しません。起動時のレイテンシの正確な量は、選択した証明書プロバイダによって異なります。
App Check トークンが有効な時間(有効期間または TTL)によって、再証明の頻度が決まります。この期間は、Firebase コンソールで構成できます。再証明は、TTL の約半分が経過したときに発生します。詳細については、証明書プロバイダの Firebase ドキュメントをご覧ください。
アプリを App Check と統合する
前提条件と要件
- バージョン 4.1 以降の Places SDK が統合されたアプリ。
- アプリの SHA-256 フィンガープリント。
- アプリのパッケージ名。
- Cloud Console でアプリの所有者である必要があります。
- Cloud Console からアプリのプロジェクト ID が必要になります。
ステップ 1: Firebase をアプリに追加する
Firebase デベロッパー ドキュメントの手順に沿って、Firebase をアプリに追加します。
ステップ 2: App Check ライブラリを追加して App Check を初期化する
デフォルトの証明書プロバイダである Play Integrity の使用方法については、Android で Play Integrity を使用して App Check を使ってみるをご覧ください。
- まだ行っていない場合は、Places SDK をアプリに統合します。
次に、App Check と Places クライアントを初期化します。
// Initialize App Check FirebaseApp.initializeApp(/* context= */ this); FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance(); firebaseAppCheck.installAppCheckProviderFactory( PlayIntegrityAppCheckProviderFactory.getInstance()); // Initialize Places SDK Places.initializeWithNewPlacesApiEnabled(context, API_KEY); PlacesClient client = Places.createClient(context);.
ステップ 3: トークン プロバイダを追加する
Places API を初期化したら、setPlacesAppCheckTokenProvider() を呼び出して PlacesAppCheckTokenProvider を設定します。
Places.initializeWithNewPlacesApiEnabled(context, API_KEY); Places.setPlacesAppCheckTokenProvider(new TokenProvider()); PlacesClient client = Places.createClient(context);.
トークン フェッチャー インターフェースの実装例を次に示します。
/** Sample client implementation of App Check token fetcher interface. */ static class TokenProvider implements PlacesAppCheckTokenProvider { @Override public ListenableFuture<String> fetchAppCheckToken() { SettableFuture<String> future = SettableFuture.create(); FirebaseAppCheck.getInstance() .getAppCheckToken(false) .addOnSuccessListener( appCheckToken -> { future.set(appCheckToken.getToken()); }) .addOnFailureListener( ex -> { future.setException(ex); }); return future; } }
ステップ 4: デバッグを有効にする(省略可)
アプリをローカルで開発してテストする場合や、継続的インテグレーション(CI)環境で実行する場合は、デバッグ シークレットを使用して有効な App Check トークンを取得するアプリのデバッグビルドを作成できます。これにより、デバッグビルドで実際の証明書プロバイダを使用する必要がなくなります。
エミュレータまたはテストデバイスでアプリを実行するには:
- App Check ライブラリを
build.gradleファイルに追加します。 - デバッグビルドでデバッグ プロバイダ ファクトリを使用するように App Check を構成します。
- アプリを起動すると、ローカル デバッグ トークンが作成されます。このトークンを Firebase コンソールに追加します。
- 詳細と手順については、App Check のドキュメントをご覧ください。
CI 環境でアプリを実行するには:
- Firebase コンソールでデバッグ トークンを作成し、CI システムのセキュア キー ストレージに追加します。
- App Check ライブラリを
build.gradleファイルに追加します。 - デバッグ トークンを使用するように CI ビルド バリアントを構成します。
- App Check トークンを必要とするテストクラスのコードを
DebugAppCheckTestHelperでラップします。 - 詳細と手順については、App Check のドキュメントをご覧ください。
ステップ 5: アプリのリクエストをモニタリングし、適用を決定する
適用を開始する前に、アプリの正規ユーザーを中断しないようにする必要があります。これを行うには、App Check の指標画面にアクセスして、アプリのトラフィックの割合が確認済み、期限切れ、不正のいずれであるかを確認します。トラフィックの大部分が確認済みであることが確認できたら、適用を有効にできます。
詳細と手順については、Firebase App Check のドキュメントをご覧ください。