在 Apple 平台上使用 App Attest 启用 App Check

此页面向您展示如何使用内置的 App Attest 提供程序在 Apple 应用程序中启用 App Check。启用 App Check 有助于确保只有您的应用可以访问您项目的 Firebase 资源。看到一个概述此功能。

应用程序检查使用应用程序的Attest验证请求火力地堡服务从你真实的应用程序来。应用来查看当前不使用应用证明分析欺诈风险

如果你想使用App中检查你自定义的供应商,请参阅实现自定义应用程序检查供应商

1. 设置您的 Firebase 项目

  1. 您需要 Xcode 12.5+ 才能使用 App Attest。

  2. 添加火力地堡到Apple的项目,如果你还没有这样做。

  3. 注册您的应用程序使用应用程序检查与在该应用程序的Attest提供商项目设置>应用程序检查的火力地堡控制台部分。

    您通常需要注册项目的所有应用,因为一旦您为 Firebase 产品启用强制执行,只有注册的应用才能访问产品的后端资源。

  4. 可选:在应用注册设置,设置一个自定义的时间生存(TTL)为App检查令牌由供应商发出的。您可以将 TTL 设置为 30 分钟到 7 天之间的任何值。更改此值时,请注意以下权衡:

    • 安全性:较短的 TTL 提供更强的安全性,因为它减少了攻击者可以滥用泄漏或拦截的令牌的窗口。
    • 性能:更短的 TTL 意味着您的应用程序将更频繁地执行证明。由于应用证明过程会在每次执行时增加网络请求的延迟,因此较短的 TTL 可能会影响应用的性能。
    • 配额和成本:更短的 TTL 和频繁的重新认证会更快地耗尽您的配额,而对于付费服务,可能会花费更多。见配额和限制

    1小时的默认TTL是合理的大多数应用程序。请注意,App Check 库会在大约一半的 TTL 持续时间刷新令牌。

2. 将 App Check 库添加到您的应用中

  1. 为App检查的依赖添加到项目中的Podfile

    pod 'Firebase/AppCheck'

    或者,你可以用斯威夫特包管理器来代替。

    确保您还使用了您依赖的任何其他 Firebase SDK 的最新版本。

  2. 运行pod install并打开创建.xcworkspace文件。

  3. 在Xcode中,添加该应用的Attest功能来为您的应用程序。

  4. 在项目的.entitlements文件,设置应用程序的Attest环境中production

3. 初始化应用检查

在使用任何其他 Firebase SDK 之前,您需要初始化 App Check。

首先,写的实现AppCheckProviderFactory 。您的实施细节将取决于您的用例。

例如,如果你只有在iOS用户14以后,你可以简单地随时创建AppAttestProvider对象:

迅速

注:本产品火力地堡上没有watchOS目标。

class YourSimpleAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
    return AppAttestProvider(app: app)
  }
}

目标-C

注:本产品火力地堡上没有watchOS目标。

@interface YourSimpleAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourSimpleAppCheckProviderFactory

- (nullable id<FIRAppCheckProvider>)createProviderWithApp:(nonnull FIRApp *)app {
  return [[FIRAppAttestProvider alloc] initWithApp:app];
}

@end

或者,你可以创建AppAttestProvider对象iOS上14及更高版本,回落到DeviceCheckProvider在较早版本:

迅速

注:本产品火力地堡上没有watchOS目标。

class YourAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
    if #available(iOS 14.0, *) {
      return AppAttestProvider(app: app)
    } else {
      return DeviceCheckProvider(app: app)
    }
  }
}

目标-C

注:本产品火力地堡上没有watchOS目标。

@interface YourAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourAppCheckProviderFactory

- (nullable id<FIRAppCheckProvider>)createProviderWithApp:(nonnull FIRApp *)app {
  if (@available(iOS 14.0, *)) {
    return [[FIRAppAttestProvider alloc] initWithApp:app];
  } else {
    return [[FIRDeviceCheckProvider alloc] initWithApp:app];
  }
}

@end

你已经实现了一个后AppCheckProviderFactory类,配置应用程序检查使用它:

迅速

注:本产品火力地堡上没有watchOS目标。

let providerFactory = YourAppCheckProviderFactory()
AppCheck.setAppCheckProviderFactory(providerFactory)

FirebaseApp.configure()

目标-C

注:本产品火力地堡上没有watchOS目标。

YourAppCheckProviderFactory *providerFactory =
        [[YourAppCheckProviderFactory alloc] init];
[FIRAppCheck setAppCheckProviderFactory:providerFactory];

[FIRApp configure];

在您的应用程序中安装 App Check 库后,开始将更新的应用程序分发给您的用户。

更新后的客户端应用将开始发送 App Check 令牌及其向 Firebase 发出的每个请求,但 Firebase 产品不需要令牌有效,直到您在 Firebase 控制台的 App Check 部分启用强制执行。有关详细信息,请参阅接下来的两节。

5. 监控请求指标

现在您的更新应用已掌握在用户手中,您可以为您使用的 Firebase 产品启用 App Check 的强制执行。但是,在您这样做之前,您应该确保这样做不会干扰您现有的合法用户。

实时数据库、Cloud Firestore 和 Cloud Storage

您可以用来为实时数据库、Cloud Firestore 和 Cloud Storage 做出此决定的一个重要工具是 App Check 请求指标屏幕。

要查看应用程序检查请求指标的产物,打开项目设置>应用检查的火力地堡控制台的部分。例如:

App Check 指标页面的屏幕截图

每个产品的请求指标分为四类:

  • 验证请求是那些具有有效的应用程序检查令牌。启用 App Check 强制后,只有此类别中的请求才会成功。

  • 过时的客户端请求是那些缺少应用程序检查令牌。在 App Check 包含在应用中之前,这些请求可能来自旧版本的 Firebase SDK。

  • 来历不明的请求是那些缺少应用程序检查令牌,不要像他们来自火力地堡SDK。这些可能来自使用被盗 API 密钥发出的请求或在没有 Firebase SDK 的情况下发出的伪造请求。

  • 无效的请求是那些有一个无效的应用程序检查令牌,这可能是从不真实客户端试图假冒您的应用程序,或从模拟环境。

当您决定启用强制执行时,您的应用程序的这些类别的分布应该通知。以下是一些指导方针:

  • 如果几乎所有最近的请求都来自经过验证的客户端,请考虑启用强制措施以开始保护您的后端资源。

  • 如果最近请求的很大一部分来自可能已过时的客户端,为避免干扰用户,请考虑等待更多用户更新您的应用,然后再启用强制执行。对已发布的应用程序强制执行 App Check 将破坏未与 App Check SDK 集成的先前应用程序版本。

  • 如果您的应用程序尚未启动,您应该立即启用 App Check 强制执行,因为没有任何过时的客户端在使用。

云功能

对于 Cloud Functions,您可以通过检查函数的日志来获取 App Check 指标。可调用函数的每次调用都会发出一个结构化的日志条目,如下例所示:

{
  "severity": "INFO",    // INFO, WARNING, or ERROR
  "logging.googleapis.com/labels": {"firebase-log-type": "callable-request-verification"},
  "jsonPayload": {
    "message": "Callable header verifications passed.",
    "verifications": {
      // ...
      "app": "MISSING",  // VALID, INVALID, or MISSING
    }
  }
}

您可以通过分析在谷歌云端控制台这些指标建立一个日志,基于计数器的度量与以下数据过滤器:

resource.type="cloud_function"
resource.labels.function_name="YOUR_CLOUD_FUNCTION"
resource.labels.region="us-central1"
labels.firebase-log-type="callable-request-verification"

标签的指标使用领域jsonPayload.verifications.appCheck

6. 启用执行

要启用强制执行,请按照以下每个产品的说明进行操作。为产品启用强制执行后,所有对该产品的未经验证的请求都将被拒绝。

实时数据库、Cloud Firestore 和 Cloud Storage

要为实时数据库、Cloud Firestore(iOS 和 Android)和 Cloud Storage 启用强制措施:

  1. 打开项目设置>应用程序检查的火力地堡控制台部分。

  2. 展开要为其启用强制执行的产品的指标视图。

  3. 点击强制执行,并确认您的选择。

请注意,启用强制执行后最多可能需要 10 分钟才能生效。

云功能

请参阅启用应用检查执法云功能

下一步

如果在您为 App Check 注册您的应用程序后,您想要在 App Check 通常不会将其归类为有效的环境中运行您的应用程序,例如开发期间的模拟器,或从持续集成 (CI) 环境中运行您的应用程序,您可以创建使用 App Check 调试提供程序而不是真正的证明提供程序的应用程序的调试版本。

请参阅使用App请与苹果平台的调试提供者