0

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

有人可以向我解释设备检查在这种情况下如何与 Firebase 一起工作,以及它与 Firebase 还支持的 iOS App Attest 有何不同?

Firebase iOS 应用检查文档:

Firebase 应用检查 DeviceCheck 指南

Firebase 应用检查应用证明指南

4

1 回答 1

1

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

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

我不明白引擎盖下到底发生了什么......

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

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

  1. AppAttestProvider
  2. DeviceCheckProvider
  3. AppCheckDebugProvider
  4. 您作为子类创建的自定义提供程序AppCheckProvider

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

...我想确保它正常工作

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

有人可以向我解释设备检查在这种情况下如何与 Firebase 一起工作......

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

它(设备检查)与 Firebase 也支持的 iOS App Attest 有何不同?

此处的答案可以在 Apple 的DeviceCheck文档中找到。

简而言之,区别在于两个名称。

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

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

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

我希望这回答了你的问题!

于 2022-01-26T15:40:38.230 回答