使用 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 (新版)。
- 私人或實驗性應用程式。如果應用程式不開放公開存取,就不需要 App Check。
- 如果應用程式僅用於伺服器對伺服器,則不需要 App Check。不過,如果與 GMP 通訊的伺服器是由公開用戶端 (例如行動應用程式) 使用,建議您使用 App Check 保護該伺服器,而非 GMP。
- 如果裝置遭認證供應商判定為不安全或不可信任,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,其標準 API 用量層級有每日呼叫限制。如要進一步瞭解呼叫限制,請參閱 Google Play Integrity 開發人員說明文件的「設定」頁面。
您也可以選擇使用自訂認證供應商,但這是進階用途。詳情請參閱「導入自訂 App Check 供應商」。
-
應用程式使用者在啟動時會遇到一些延遲。不過,之後任何定期重新認證都會在背景執行,使用者應該不會再遇到任何延遲。啟動時的確切延遲時間取決於您選擇的認證供應商。
App Check 權杖的有效時間 (存留時間,或稱 TTL) 決定了重新認證的頻率。您可以在 Firebase 控制台中設定這段時間。大約一半的存留時間過去後,系統會重新認證。詳情請參閱認證供應商的 Firebase 文件。
將應用程式與 App Check 整合
必要條件和規定
- 應用程式已整合 4.1 以上版本的 Places SDK。
- 應用程式的 SHA-256 指紋。
- 應用程式的套件名稱。
- 您必須是 Cloud 控制台中的應用程式擁有者。
- 您需要從 Cloud 控制台取得應用程式的專案 ID
步驟 1:將 Firebase 新增至應用程式
按照 Firebase 開發人員說明文件中的指示,將 Firebase 新增至應用程式。
步驟 2:新增 App Check 程式庫並初始化 App Check
如要瞭解如何使用預設認證供應商 Play Integrity,請參閱「開始在 Android 上使用 App Check 和 Play Integrity」。
- 如果尚未將 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 權杖。這樣一來,您就不必在偵錯版本中使用實際的認證供應商。
如要在模擬器或測試裝置上執行應用程式,請按照下列步驟操作:
- 在
build.gradle檔案中加入 App Check 程式庫。 - 設定 App Check,在偵錯版本中使用偵錯服務工廠。
- 啟動應用程式,系統會建立本機偵錯權杖。將這個權杖新增至 Firebase 控制台。
- 如需更多資訊和操作說明,請參閱 App Check 說明文件。
如要在 CI 環境中執行應用程式,請按照下列步驟操作:
- 在 Firebase 控制台中建立偵錯權杖,並新增至 CI 系統的安全金鑰儲存庫。
- 在
build.gradle檔案中加入 App Check 程式庫。 - 將 CI 建構變化版本設為使用偵錯權杖。
- 在測試類別中,使用
DebugAppCheckTestHelper包裝需要 App Check 權杖的程式碼。 - 如需更多資訊和操作說明,請參閱 App Check 說明文件。
步驟 5:監控應用程式要求並決定是否強制執行
開始強制執行前,請務必確認不會干擾應用程式的合法使用者。如要這麼做,請前往 App Check 指標畫面,查看應用程式流量中已驗證、過時或不合法的百分比。確認大部分流量都已通過驗證後,即可啟用強制執行。
如需更多資訊和操作說明,請參閱 Firebase App Check 說明文件。