API 金鑰是一個唯一的字串,用於在與 Firebase 和 Google 服務互動時將請求路由到您的 Firebase 專案。本頁面介紹有關 API 金鑰的基本資訊以及透過 Firebase 應用程式使用和管理 API 金鑰的最佳實務。
有關 API 金鑰和 Firebase 的一般信息
Firebase 的 API 金鑰與典型的 API 金鑰不同
與 API 金鑰的通常使用方式不同,Firebase 服務的 API 金鑰不用於控制對後端資源的存取;這只能透過 Firebase 安全性規則(控制哪些使用者可以存取資源)和應用程式檢查(控制哪些應用程式可以存取資源)來完成。
通常,您需要嚴格保護 API 金鑰(例如,透過使用保管庫服務或將金鑰設定為環境變數);但是,Firebase 服務的 API 金鑰可以包含在程式碼或簽入的設定檔中。
儘管 Firebase 服務的 API 金鑰可以安全地包含在程式碼中,但在某些特定情況下,您應該對 API 金鑰實施限制;例如,如果您使用 Firebase ML、透過電子郵件/密碼登入方法進行的 Firebase 驗證或可計費的 Google Cloud API。稍後在本頁了解有關這些案例的更多資訊。
建立 API 金鑰
一個 Firebase 專案可以有多個 API 金鑰,但每個 API 金鑰只能與一個 Firebase 專案關聯。
當您執行下列任一操作時,Firebase 會自動為您的專案建立 API 金鑰:
- 建立 Firebase 專案 > 自動建立
Browser key
- 建立 Firebase Apple 應用程式 > 自動建立
iOS key
- 建立 Firebase Android 應用程式 > 自動建立
Android key
您也可以在Google Cloud Console中建立自己的 API 金鑰,例如用於開發或偵錯。稍後將在本頁了解有關何時建議這樣做的更多資訊。
尋找您的 API 金鑰
您可以在 Google Cloud Console的 API 和服務 > 憑證面板中檢視和管理專案的所有API 金鑰。
您也可以在以下位置找到自動與 Firebase 應用程式相符的 API 金鑰。預設情況下,同一平台(Apple、Android 和 Web)的所有專案 Firebase 應用程式都將使用相同的 API 金鑰。
Firebase Apple 應用程式— 在 Firebase 設定檔
GoogleService-Info.plist API_KEY
欄位中尋找應用程式的自動比對 API 金鑰。Firebase Android 應用程式— 在 Firebase 設定檔
google-services.json current_key
欄位中尋找應用程式的自動比對 API 金鑰。Firebase Web 應用程式— 在 Firebase 設定物件的
apiKey
欄位中尋找應用程式的自動比對 API 金鑰。
使用 API 金鑰
API 金鑰用於在與 Firebase/Google 服務互動時識別您的 Firebase 專案。具體來說,它們用於將 API 請求與您的專案關聯以獲取配額和計費。它們對於存取公共資料也很有用。
例如,您可以透過將 API 金鑰的值作為查詢參數傳遞到 REST API 呼叫中來明確使用 API 金鑰。此範例顯示您如何向動態連結連結縮短器 API發出請求:
POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY
當您的應用程式呼叫 Firebase API 時,您的應用程式將自動在 Firebase 設定檔/物件中尋找專案的 API 金鑰。但是,您可以使用不同的機制(包括環境變數)來設定 API 金鑰。
對 API 金鑰應用限制(建議)
儘管沒有必要將 Firebase 服務的 API 金鑰視為機密,但在某些特定情況下(請參閱下文),您可能需要採取其他措施來保護您的專案免於 API 金鑰的濫用。
如果您使用基於密碼的身份驗證,請收緊配額
如果您使用基於密碼的 Firebase 驗證,並且有人掌握了您的 API 金鑰,那麼只要這些資料受Firebase 安全規則保護,他們就無法存取您的 Firebase 專案的任何資料庫或雲端儲存資料。但是,他們可以使用您的 API 金鑰存取 Firebase 的身份驗證端點並對您的專案發出身份驗證請求。
為了減輕有人濫用 API 金鑰來嘗試暴力攻擊的可能性,您可以收緊identitytoolkit.googleapis.com
端點的預設配額,以反映應用程式的正常流量預期。請注意,如果您收緊此配額並且您的應用程式突然獲得用戶,則您可能會遇到登入錯誤,直到您增加配額為止。您可以在Google Cloud Console中變更專案的 API 配額。
對特定類型的 API 使用單獨的、受限的 API 金鑰
雖然用於 Firebase 服務的 API 金鑰通常不需要被視為秘密,但您應該對用於授予對您手動啟用的 Google Cloud API 的存取權限的 API 金鑰採取一些額外的預防措施。
如果您使用 Firebase 未自動啟用的 Google Cloud API(在任何平台上)(這表示您自己啟用了它),則應考慮建立單獨的、受限制的 API 金鑰以與這些 API 一起使用。如果 API 用於計費 Google Cloud 服務,這一點尤其重要。
例如,如果您在 iOS 上使用 Firebase ML 的 Cloud Vision API,則應建立單獨的 API 金鑰,僅用於存取 Cloud Vision API。
透過對非 Firebase API 使用單獨的受限 API 金鑰,您可以在必要時輪換或取代金鑰,並對 API 金鑰添加其他限制,而不會中斷您對 Firebase 服務的使用。
這些說明描述如何為名為Super Service API
的虛假API 建立單獨的、受限的 API 金鑰。
步驟 1:設定現有 API 金鑰以禁止存取Super Service API
開啟 Google Cloud Console 的憑證頁面。出現提示時,選擇您的項目。
對於清單中的每個現有 API 金鑰,開啟編輯視圖。
在API 限制部分中,選擇限制金鑰,然後將您希望 API 金鑰有權存取的所有 API 新增至清單。確保不包含您要為其建立單獨 API 金鑰的 API(在本例中為
Super Service API
)。當您設定 API 金鑰的API 限制時,您將明確聲明該金鑰有權存取的 API。預設情況下,當API 限制部分選擇了不限制金鑰時,API 金鑰可用於存取為專案啟用的任何 API。
現在,您現有的 API 金鑰將不會授予對Super Service API
存取權限,但每個金鑰將繼續適用於您新增至其API 限制清單中的任何 API。
步驟 2:建立並使用新的 API 金鑰來存取Super Service API
返回憑證頁面。確保您的 Firebase 專案仍處於選取狀態。
按一下建立憑證 > API 金鑰。記下新的 API 金鑰,然後按一下「限制金鑰」 。
在API 限制部分中,選擇限制 key ,然後僅將
Super Service API
新增至清單。這個新的 API 金鑰僅授予對
Super Service API
存取權限。配置您的應用程式和服務以使用新的 API 金鑰。
使用環境特定的 API 金鑰(建議)
如果您為不同的環境(例如暫存和生產)設定不同的 Firebase 項目,則每個應用程式實例與其對應的 Firebase 項目互動非常重要。例如,您的臨時應用程式實例永遠不應該與您的生產 Firebase 專案對話。這也意味著您的臨時應用程式需要使用與您的臨時 Firebase 專案關聯的 API 金鑰。
為了減少促進程式碼從開發到暫存再到生產的變更的問題,不要將 API 金鑰包含在程式碼本身中,而是將它們設為環境變數或將它們包含在設定檔中。
請注意,如果您將 Firebase 本機模擬器套件與 Firebase ML 一起使用進行開發,則必須建立並使用僅供偵錯的 API 金鑰。有關建立此類金鑰的說明,請參閱Firebase ML 文件。
常見問題解答
您可以使用下列任一選項來決定哪個 API 金鑰與您的 Firebase 應用程式關聯:
Firebase 控制台
轉到項目設置,然後向下捲動到您的應用程式卡。
選擇感興趣的應用程式。
取得感興趣的應用程式的 Firebase 設定檔/對象,然後找到其 API 金鑰:
Apple :下載
GoogleService-Info.plist
,然後找到API_KEY
字段Android :下載
google-services.json
,找到感興趣的應用程式的配置(尋找其套件名稱),然後找到current_key
字段Web :選擇Config選項,然後找到
apiKey
字段
Firebase CLI
透過執行以下命令來取得感興趣的應用程式的 Firebase 設定檔/物件:
firebase apps:sdkconfig PLATFORM FIREBASE_APP_ID
- PLATFORM (其中之一):
IOS
|ANDROID
|WEB
- FIREBASE_APP_ID :Firebase 為您的 Firebase 應用程式指派的唯一識別碼(尋找您的應用程式 ID )
- PLATFORM (其中之一):
在應用程式列印的 Firebase 配置中,找到其 API 金鑰:
蘋果:找到
API_KEY
字段Android :找到感興趣的應用程式的配置(查找其套件名稱),然後找到
current_key
字段Web :尋找
apiKey
字段
休息API
透過呼叫感興趣的應用程式的適用端點來取得 API 金鑰的
apiKeyId
(UID),然後將apiKeyId
值傳遞到下一步。- 蘋果:呼叫
projects.iosApps.get
- Android :呼叫
projects.androidApps.get
- Web :呼叫
projects.webApps.get
- 蘋果:呼叫
透過呼叫
projects.locations.keys.getKeyString
取得API金鑰字串。
Firebase Apple 應用程式— 每個應用程式都有自己的設定文件,並且只能列出一個 API 金鑰。
Firebase Android 應用程式— Firebase 專案中的所有 Android 應用程式都列在同一設定檔中,並且每個應用程式只能列出一個 API 金鑰。不過,此設定檔中的每個應用程式都可以列出不同的金鑰。
Firebase Web 應用程式— 每個應用程式都有自己的設定對象,並且只能列出一個 API 金鑰。
不過,您可以在一個應用程式中使用多個 API 金鑰。您必須為您的應用程式提供存取這些其他 API 金鑰的機制,例如透過環境變數。存取其他 API 金鑰的機制不能依賴 Firebase 設定檔/物件中列出的那些 API 金鑰。
當您首次取得應用程式的 Firebase 設定檔/物件時,Firebase 會檢查專案中是否存在具有與應用程式相符的「應用程式限制」的現有API 金鑰(例如,Apple 應用程式的配對捆綁包ID) 。
如果 Firebase 找不到任何匹配的受限密鑰,那麼它將在設定檔/物件中列出 Apple 應用程式的iOS key
、Android 應用程式的Android key
以及 Web 應用程式的Browser key
(假設這些密鑰存在並且沒有阻止它們與該應用程式匹配的“應用程式限制”)。
是的,您可以從設定檔/物件中手動刪除 API 金鑰。但是,您必須為應用程式提供一些其他機制來存取 API 金鑰(例如透過環境變數)。否則,對 Firebase 服務的任何呼叫都會失敗。
是的,您可以手動編輯設定檔/物件以將不同的 API 金鑰與應用程式關聯。
請注意,如果您從控制台重新取得應用程式的設定檔/對象,它將始終列出Firebase 自動與該應用程式相符的API 金鑰。因此,您需要根據需要重複手動編輯。
不可以,API 金鑰只能標識特定項目,不能移動到其他項目。
以下是 API 金鑰無效的一些最常見原因:
API 金鑰應用了「API 金鑰限制」 ,使其無法與嘗試使用該金鑰的應用程式相符(「應用程式限制」),或無法用於正在呼叫的 API(「API 限制」)。
API 金鑰已從 Google Cloud Console 中的項目中刪除。
未為應用程式的 Firebase 設定檔/物件中列出的專案 ID 建立 API 金鑰。
解決此問題的一種方法是取得應用程式的 Firebase 設定檔/物件的更新版本,然後將舊的設定檔/物件替換為新的更新檔案/物件。在傳送設定檔以供下載或在控制台中顯示設定物件之前,Firebase 會檢查列出的 API 金鑰是否與應用程式相符。
您的網路應用程式使用的 API 金鑰可能應用了「API 限制」 。如果是這種情況,請確保 Firebase 管理 API 位於允許的 API 清單中。
如果您刪除應用程式正在使用的 API 金鑰,則來自該應用程式的 API 呼叫將會失敗。您可能會收到報告、電子郵件或錯誤,表示您嘗試使用無效的 API 金鑰。
刪除 API 金鑰是永久性的且無法撤銷。