使用 App Check 保護 API 金鑰
Firebase App Check 會封鎖來自非合法應用程式的流量,為應用程式對 Google 地圖平台的呼叫提供保護。方法是檢查 reCAPTCHA Enterprise 等認證服務供應商提供的權杖。將應用程式與 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 整合:
- 將 Firebase 新增至應用程式。
- 新增及初始化 App Check 程式庫。
- 在應用程式中新增權杖供應工具。
- 初始化 Places 和 App Check API。
- 啟用偵錯功能。
- 監控應用程式要求,並決定是否要執行。
整合 App Check 後,您就能在 Firebase 控制台中查看後端流量指標。這些指標會依據請求是否附帶有效的 App Check 權杖,提供請求的詳細資料。詳情請參閱 Firebase App Check 說明文件。
當您確定大部分要求都來自合法來源,且使用者已更新至包含 App Check 實作功能的最新版應用程式,即可啟用強制執行機制。強制執行之後,App Check 就會拒絕所有未取得有效 App Check 權杖的流量。
規劃 App Check 整合時的注意事項
規劃整合時,請考量以下幾點:
- 我們推薦的其中一個認證服務供應商 reCAPTCHA Enterprise 每月收取超過 10,000 次評估的費用。
我們推薦的另一個認證服務供應商 reCAPTCHA v3 有配額限制,超過配額後就不會評估流量。
您可以選擇使用自訂認證提供者,但這是進階用途。詳情請參閱 App Check 說明文件。
-
您的應用程式使用者在啟動時會遇到一些延遲。不過,之後任何定期重新認證作業都會在背景執行,使用者應該不會再遇到任何延遲情形。啟動時的延遲時間長短取決於您選擇的認證服務供應商。
App Check 權杖的有效時間 (稱為「存留時間」或 TTL) 會決定重新認證的頻率。您可以在 Firebase 控制台中設定這個時間長度。在 TTL 過半時,系統會重新認證。詳情請參閱認證服務供應商的 Firebase 說明文件。
將應用程式與 App Check 整合
必要條件
- 應用程式已載入 最新的每週或每季版本 Maps JS API、Core 和 Places 程式庫。
- 已啟用 Maps JS 和 Places API (新版) API 的 Cloud 專案。
- 您必須是 Cloud 控制台中應用程式的擁有者。
- 您需要 Cloud 控制台中的應用程式專案 ID
步驟 1:將 Firebase 新增至應用程式
請按照Firebase 開發人員說明文件中的操作說明,將 Firebase 新增至應用程式。
步驟 2:新增 App Check 程式庫並初始化 App Check
Firebase 會針對每個預設認證服務供應商提供操作說明。本操作說明將說明如何設定 Firebase 專案,並將 App Check 程式庫新增至應用程式。請按照提供的程式碼範例初始化 App Check。
步驟 3:載入 Maps JS API 程式庫
如以下程式碼片段所示,載入核心、地圖和地點程式庫。如需更多資訊和操作說明,請參閱 Maps JavaScript API 地點類別說明文件。
async function init() { const {Settings} = await google.maps.importLibrary('core'); const {Map} = await google.maps.importLibrary('maps'); const {Place} = await google.maps.importLibrary('places'); }
步驟 4:初始化 Places 和 App Check API
- 使用 Firebase 控制台提供的設定初始化 App Check。
- 請確認 Maps JS API 的要求隨附 App Check 權杖:
async function init() { const {Settings} = await google.maps.importLibrary('core'); const {Map} = await google.maps.importLibrary('maps'); const {Place} = await google.maps.importLibrary('places'); const app = initializeApp({ // Your firebase configuration object }); // Pass your reCAPTCHA Enterprise site key to initializeAppCheck(). const appCheck = initializeAppCheck(app, { provider: new ReCaptchaEnterpriseProvider( 'abcdefghijklmnopqrstuvwxy-1234567890abcd', ), // Optional argument. If true, the SDK automatically refreshes App Check // tokens as needed. isTokenAutoRefreshEnabled: true, }); Settings.getInstance().fetchAppCheckToken = () => getToken(appCheck, /* forceRefresh = */ false); // Make a Places JS request const place = new Place({id: 'ChIJN5Nz71W3j4ARhx5bwpTQEGg'}); await place.fetchFields({fields: ['*']}); // Load a map map = new Map(document.getElementById("map"), { center: { lat: 37.4161493, lng: -122.0812166 }, zoom: 8, }); }
步驟 5:啟用偵錯功能 (選用)
如果您想在本機開發及測試應用程式,或是在持續整合 (CI) 環境中執行應用程式,可以建立應用程式的偵錯版本,使用偵錯密鑰取得有效的 App Check 符記。這樣一來,您就不會在偵錯版本中使用實際的認證提供者。
如要在本機上測試應用程式,請執行下列指令:
- 為開發目的啟用偵錯供應器。
- 您會從 SDK 的偵錯記錄中收到自動產生的隨機 UUID4 (在 App Check 說明文件中稱為「偵錯權杖」)。將這個權杖新增至 Firebase 控制台。
- 如需更多資訊和操作說明,請參閱 App Check 說明文件。
如要在 CI 環境中執行應用程式,請按照下列步驟操作:
- 在 Firebase 控制台產生隨機 UUID4。
- 將 UUID4 新增為偵錯權杖,然後複製至持續整合 (CI) 測試每次執行時會存取的秘密儲存庫。
- 如需更多資訊和操作說明,請參閱 App Check 說明文件。
步驟 6:監控應用程式要求並決定是否執行
在開始執行前,請務必確認不會影響應用程式的合法使用者。如要確認這點,請前往「App Check」指標畫面,查看應用程式流量中經過驗證、過時或不合法的百分比。確認大部分流量都已驗證後,即可啟用強制執行機制。
詳情請參閱 Firebase App Check 說明文件。