Firebaser 在这里。
我实际上并不完全确定您的架构,但如果您希望减少对自己的服务器的滥用,该服务器在 Android、iOS 或 Web 上为您的 Firebase 应用提供服务,那么是的,我们正在努力支持此用例在App Check。
但是,App Check 不是用于保护服务器到服务器的通信(两台服务器都在您的控制之下)。在 Google Cloud 上,这通常使用服务帐号和 IAM 控件来完成。
除此之外,假设您想要第一件事而不是第二件事,并且假设您不想等待官方支持准备好,那么实际上您有一种方法可以做到这一点现在,但你必须自己做很多工作。此外,由于 App Check 目前处于 Beta 阶段,因此它可以以向后不兼容的方式进行更改,并且不受任何 SLA 或弃用政策的约束。
为了获取 App Check 令牌,您可以对这些端点进行 POST。这些实际上是 SDK 在后台使用的相同端点,因此您可以研究它们的源代码以查看如何进行这些调用的示例。您还应该按照他们的示例,根据返回的 App Check 令牌的到期时间定期重新证明应用程序并重新获取 App Check 令牌。
[编辑:确保首先在 App Check 中注册您的应用。请在此处查看我们的documentation。]
- 对于 DeviceCheck,使用
https://firebaseappcheck.googleapis.com/v1beta/projects/<project_number>/apps/<app_id>:exchangeDeviceCheckToken?key=<api_key>
- 正文应该是一个带有单个字符串字段
device_token 的JSON 对象。这是 Apple 客户端 DeviceCheck API 返回的 device_token。这是 Base64 编码的 Data (Swift) 或 NSData (ObjC) 对象。
- 对于 reCAPTCHA v3,使用
https://firebaseappcheck.googleapis.com/v1beta/projects/<project_number>/apps/<app_id>:exchangeRecaptchaToken?key=<api_key>
- 对于 SafetyNet,请使用
https://firebaseappcheck.googleapis.com/v1beta/projects/<project_number>/apps/<app_id>:exchangeSafetyNetToken?key=<api_key>
- 对于自定义提供程序,请按照我们的public documentation 中的说明进行操作。但是,您不会在您的应用程序中使用 App Check SDK。相反,您需要直接编写代码来联系您的令牌服务器。
如果相应的令牌无效,这些端点将拒绝带有403 Forbidden 的请求。您的客户只应在此类失败时重试少量有限次,因为情况可能不会改变,如果您重试,您还应该使用相应的证明提供者重新运行整个证明流程。
一旦您的应用通过上述方式收到 App Check 令牌,您应该将其附加到对您想要保护的 API(在您的服务器上)发出的每个请求中。例如,您可以通过标头发送 App Check 令牌。一旦您的服务器收到此类请求,请使用 Admin SDK Verify Token API 验证此令牌。例如,
const admin = require("firebase-admin");
admin.initializeApp();
async function verifyToken(token) {
admin.appCheck().verifyToken(token)
.then((token) => {
console.log(token.token)
})
.catch((e) => console.log(e))
}
这个验证令牌 API 实际上是我们的 Callable Functions SDK 在后台使用的。如果令牌无效,您的服务器应拒绝该请求。
请注意,此验证令牌 API 可以向我们的公钥端点发出 GET 调用(但随后会缓存一段时间),因此请记住,如果您的带宽有限、CPU 周期有限或没有在令牌验证时缓存:
-
https://firebaseappcheck.googleapis.com/v1beta/jwks
同样,我们正在努力让您能够直接从 App Check SDK 检索 App Check 令牌,这样您就不必自己管理定期刷新或 POST 请求。请在下个月继续关注此功能。