Google 致力于为黑人社区推动种族平等。查看具体举措
此页面由 Cloud Translation API 翻译。
Switch to English

保护Firebase ML iOS应用的云凭据

如果您的iOS应用使用Firebase ML的一种云API,则在正式投入生产之前,您应该采取一些其他措施来防止未经授权的API访问。

1.缩小现有API密钥的范围

首先,配置您现有的API密钥以禁止访问Cloud Vision API:

  1. 打开Goog​​le Cloud Console的“凭据”页面。出现提示时,选择与您的Firebase项目同名的项目。

  2. 对于列表中的每个API密钥,打开编辑视图,然后在“密钥限制”部分中,将Cloud Vision API之外的所有可用API添加到列表中。

    在配置API密钥的API限制时,您在明确声明密钥授权访问的API。默认情况下,当“ API限制”部分为空时,API密钥可用于访问为项目启用的任何API。

现在,您现有的API密钥将不再授予对云ML服务的访问权限,但它们将继续适用于您自己启用的任何API,或在设置Firebase时自动启用的API。

请注意,如果将来启用任何其他API,则还必须将它们添加到API密钥的“ API限制”列表中。

2.创建用于Firebase ML的新API密钥

接下来,为Firebase ML创建一个新的API密钥,该密钥仅允许调用Cloud Vision API:

  1. 返回“凭据”页面。确保您的Firebase项目仍处于选中状态。

  2. 单击创建凭证> API密钥。记下新的API密钥,然后单击限制密钥

  3. 在“密钥限制”部分中,仅将Cloud Vision API添加到列表中。

此API密钥仅授予对Cloud Vision API的访问权限,Firebase ML可以使用它来访问基于云的模型。

为了帮助减轻密钥泄露的后果,您应该从其默认设置中减少Cloud Vision API的每用户配额。为此:

  1. 打开Goog​​le Cloud Console的Cloud Vision API配额页面。出现提示时,选择与您的Firebase项目同名的项目。

  2. 在“请求”部分,将“每用户每分钟请求数”配额设置为适合您的应用的值。例如,如果您的应用程序涉及上传文档的图片以获取其文本,则用户不太可能每隔几秒钟执行一次以上操作,因此30-40的配额可能是安全的。

    注意,在这种情况下,“每个用户的请求”是指来自单个IP地址的请求。如果您希望多个用户从NAT后面同时使用您的应用程序,则可能需要考虑这一点。

4.使用Firebase ML API密钥调用Cloud 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)
}

物镜

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功能启动应用程序的信息,请参阅启动清单