获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

保护您的 Firebase ML Apple 应用的云凭证

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

如果您的 Apple 应用程序使用 Firebase ML 的云 API 之一,那么在您将应用程序投入生产之前,您应该采取一些额外的步骤来防止未经授权的 API 访问。

1.减少现有API密钥的范围

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

  1. 打开 Google Cloud Console 的凭据页面。出现提示时,选择您的项目。

  2. 对于列表中的每个现有 API 密钥,打开编辑视图。

  3. 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:

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

  2. 单击创建凭据 > API 密钥。记下新的 API 密钥,然后单击Restrict key

  3. API 限制部分,选择Restrict key ,然后将 Cloud Vision API 添加到列表中。

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

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

  1. 打开 Google Cloud Console 的Cloud Vision API 配额页面。出现提示时,选择您的项目。

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