如果您的 Apple 應用程序使用 Firebase ML 的雲 API 之一,那麼在您將應用程序投入生產之前,您應該採取一些額外的步驟來防止未經授權的 API 訪問。
1.減少現有API密鑰的範圍
首先,配置您現有的 API 密鑰以禁止訪問 Cloud Vision API:
打開 Google Cloud Console 的憑據頁面。出現提示時,選擇您的項目。
對於列表中的每個現有 API 密鑰,打開編輯視圖。
在API 限制部分,選擇Restrict key ,然後將您希望 API 密鑰訪問的所有 API 添加到列表中。確保不包含 Cloud Vision API。
當您配置 API 密鑰的API 限制時,您是在明確聲明該密鑰可以訪問的 API。默認情況下,當API 限制部分選擇了不限制密鑰時,API 密鑰可用於訪問為項目啟用的任何 API。
現在,您現有的 API 密鑰將不會授予對雲 ML 服務的訪問權限,但每個密鑰將繼續適用於您添加到其API 限制列表中的任何 API。
請注意,如果您將來啟用任何其他 API,則必須將它們添加到適用 API 密鑰的API 限制列表中。
2. 創建一個用於 Firebase ML 的新 API 密鑰
接下來,為 Firebase ML 創建一個新的 API 密鑰,它只允許調用 Cloud Vision API:
返回憑證頁面。確保您的 Firebase 項目仍處於選中狀態。
單擊創建憑據 > API 密鑰。記下新的 API 密鑰,然後單擊Restrict key 。
在API 限制部分,選擇Restrict key ,然後僅將 Cloud Vision API 添加到列表中。
此 API 密鑰僅授予對 Cloud Vision API 的訪問權限,並且 Firebase ML 可以使用它來訪問基於雲的模型。
3. 推薦:減少Cloud Vision API的配額
為了幫助減輕密鑰洩露的後果,您應該減少 Cloud Vision API 的每用戶配額的默認設置。為此:
打開 Google Cloud Console 的Cloud Vision API 配額頁面。出現提示時,選擇您的項目。
在Requests部分,將Requests per minute per user配額設置為適合您的應用程序的合理值。例如,如果您的應用涉及上傳文檔圖片以取回其文本,用戶不太可能每隔幾秒執行一次以上,因此 30-40 的配額可能是安全的。
請注意,在此上下文中,“每個用戶的請求數”是指來自單個 IP 地址的請求。如果您希望多個用戶從 NAT 後面同時使用您的應用程序,您可能需要考慮這一點。
4. 使用您的 Firebase ML API 密鑰調用雲 API
最後,在您的應用中,將 Firebase ML 配置為使用您的新 API 密鑰。
由於 Firebase ML API 密鑰允許對 Cloud Vision API 進行未經身份驗證的訪問,因此務必對密鑰保密,以防止未經授權的使用和對您的計費帳戶的收費。為此,您應該避免將 API 密鑰包含在您的應用程序二進製文件中。相反,在應用程序運行時,驗證已知的良好用戶是否已登錄,然後才從服務器檢索 API 密鑰。
即使遵守這些做法,API 密鑰也有可能被洩露。您應該採取措施幫助減輕密鑰洩露的後果,例如如上所述減少 API 的每用戶配額、實施密鑰輪換策略以及向不同的用戶組發布不同的密鑰。
在您的應用程序安全獲取 API 密鑰後,當您要調用 Firebase ML Cloud API 時,指定密鑰:
迅速
if let cloudVisionKey = getYourApiKey() { // See note above about securing your API key
let options = VisionCloudDetectorOptions()
options.apiKeyOverride = cloudVisionKey
let cloudDetector = Vision.vision().cloudLandmarkDetector(options: options)
}
目標-C
NSString *cloudVisionKey = [self getYourApiKey]; // See note above about securing your API key
if (cloudVisionKey != nil) {
FIRVisionCloudDetectorOptions *options =
[[FIRVisionCloudDetectorOptions alloc] init];
options.APIKeyOverride = cloudVisionKey;
FIRVisionCloudLandmarkDetector *landmarkDetector =
[vision cloudLandmarkDetectorWithOptions:options];
}
此外,您應該遵循保護 API 密鑰中的一般建議。
下一步
有關在使用其他 Firebase 功能時準備啟動應用程序的信息,請參閱啟動清單。