使用 iOS DeviceCheck 的 Firebase App Check 如何工作?

How does Firebase App Check using iOS DeviceCheck work?

我最近决定在 Firebase 上为一个 iOS 应用程序启用 App Check,我有一个 运行 用于小于 300 人的小用户组。对于 iOS 个项目,Firebase 有两个选项用于 App Check DeviceCheck 和 App Attest。通过从我的 Apple Developer 帐户上传我的 Auth Key,我能够毫无问题地打开 DeviceCheck。一切似乎都没有问题,但我不明白引擎盖下到底发生了什么,因为 Firebase 文档只解释了如何设置它,我想确保它正常工作。

有人可以向我解释设备检查在这种情况下如何使用 Firebase 以及它与 Firebase 也支持的 iOS App Attest 有何不同?

Firebase iOS 应用检查文档:

Firebase App Check DeviceCheck Guide

Firebase App Check App Attest Guide

How does Firebase App Check using iOS DeviceCheck work?

简而言之,SDK 在发出请求时会向 AppCheck SDK 询问一个特殊的 AppCheck 令牌。当使用 App Check 配置为使用 DeviceCheck 时,它会在 DeviceCheck 框架的帮助下生成请求的令牌。

I am not understanding what exactly is happening under the hood ...

这里有更多细节可以帮助澄清事情:

AppCheck SDK 使用 AppCheckProviders 生成应用检查令牌。 AppCheckProvider 有 4 种类型:

  1. AppAttestProvider
  2. DeviceCheckProvider
  3. AppCheckDebugProvider
  4. Custom providers that you create as a subclass of AppCheckProvider

对于某些支持 AppCheck 强制执行的 Firebase SDK(即 Firestore),它们会在发送请求时向 AppCheck SDK 询问 AppCheck 令牌。 AppCheck SDK 使用上面列出的 4 AppCheckProviders 之一生成令牌。您可以使用 AppCheck 的 AppCheck.setAppCheckProviderFactory(_:) API 自定义使用哪个提供程序。我在 .

中写了更多关于它的目的

... I want to make sure it is working correctly

如果您能够在 Firebase 控制台中看到 request metrics,则 AppCheck 已正确实施并正常工作。如果您启用了强制执行,您应该会开始在指标图中看到一些强制执行的请求。

Could someone explain to me how Device Check works in this scenario with Firebase ...

因此,当 AppCheck SDK 使用 DeviceCheckProvider(此提供程序是默认提供程序!)时,AppCheck SDK 将在 Apple 的 DeviceCheck 框架的帮助下创建 AppCheck 令牌。

how it (Device Check) is different from iOS App Attest that Firebase also supports?

这里的答案可以在 Apple 的 DeviceCheck 文档中找到。

总之,就是两个名字的区别

设备检查可用于验证请求是否来自实际设备。例如,假设您有一个 iOS 应用,并且正在使用 Firebase AppCheck 和 DeviceCheckProvider。如果启用强制执行,则只有来自实际设备的请求才会成功。因此,如果我尝试通过 curl 从命令行发出请求来访问您的后端 API,它应该会被拒绝,因为没有令牌来确认请求来自 实际设备。这可以保护后端免受此类滥用。

App Attest 是 Device Check 框架的一部分,通过 证明请求来自 valid instance of your app 来提供更高级的验证。要了解这为何有用,请考虑将您的 iOS 应用配置为使用 Firebase AppCheck 和 DeviceCheckProvider。假设黑客将您的应用程序重新编译到实际设备上。在这种情况下,DeviceCheck 的有效性会降低,因为从此恶意副本发送的请求在技术上来自“实际设备”,因此将生成有效令牌。 App Attest 更高级的证明可以证明请求来自您应用程序的 valid 实例。在此示例中,黑客的副本将不是有效实例。

此时,您可能想知道为什么在可以使用更高级的 App Attest 时还要使用 DeviceCheck,原因是 OS 可用性:App Attest 仅适用于 iOS 14.0+.

希望这能回答您的问题!