使用 iOS DeviceCheck 进行 Firebase 应用检查的工作原理是什么?
简而言之,SDK 会在发出请求时向 AppCheck SDK 索取特殊的 AppCheck 令牌。当使用 App Check 配置为使用 DeviceCheck 时,它将在 DeviceCheck 框架的帮助下生成请求的令牌。
我不明白幕后到底发生了什么......
这里还有一些细节可以帮助澄清事情:
AppCheck SDK 使用AppCheckProviders 生成应用检查令牌。 AppCheckProviders 有 4 种类型:
AppAttestProvider
DeviceCheckProvider
AppCheckDebugProvider
- 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 自定义使用哪个提供程序。我在answer 中写了更多关于它的目的。
...我想确保它正常工作
如果您能够在 Firebase 控制台中看到 request metrics,则表明 AppCheck 已正确实施且正常工作。如果您启用了强制执行,您应该会开始在指标图表中看到一些强制执行的请求。
有人可以向我解释一下设备检查在这种情况下如何与 Firebase 一起工作吗...
因此,当 AppCheck SDK 使用 DeviceCheckProvider(此提供程序是默认提供程序!)时,AppCheck SDK 将在 Apple 的 DeviceCheck 框架的帮助下创建 AppCheck 令牌。
它(设备检查)与 Firebase 也支持的 iOS App Attest 有何不同?
这里的答案可以在 Apple 的 DeviceCheck 文档中找到。
简而言之,区别就在于这两个名字。
设备检查可用于验证请求来自实际设备。例如,假设您有一个 iOS 应用,并且正在使用带有 DeviceCheckProvider 的 Firebase AppCheck。如果启用强制执行,则只有来自实际设备的请求才会成功。因此,如果我尝试通过curl'从命令行发出请求来访问您的后端 API,它应该会被拒绝,因为没有令牌来确认请求来自实际设备。这可以保护后端免受此类滥用。
App Attest 是 Device Check 框架的一部分,通过 证明请求来自 valid instance of your app 来提供更高级的验证。要了解这为何有用,请考虑将您的 iOS 应用程序配置为使用带有 DeviceCheckProvider 的 Firebase AppCheck。假设黑客将您的应用程序重新编译到实际设备上。在这种情况下,DeviceCheck 的有效性会降低,因为从该恶意副本发送的请求在技术上来自“实际设备”,因此将生成有效令牌。 App Attest 更高级的证明可以证明请求来自您应用的有效实例。在此示例中,黑客的副本不是有效实例。
此时,您可能想知道当您可以使用更高级的 App Attest 时为什么还要使用 DeviceCheck,原因是操作系统可用性:App Attest 仅适用于 iOS 14.0+。
我希望这能回答您的问题! ?