【问题标题】:How to block firestore REST API access如何阻止 Firestore REST API 访问
【发布时间】:2021-06-22 09:08:04
【问题描述】:

我有一个 Flutter 应用程序并使用 firebase authfirestorefirestore 中的数据只能在应用内读取和写入。

我刚刚意识到,每个授权用户都可以通过 REST api 访问他在 firestore 中的数据,前提是他有正确的身份验证令牌(例如来自 AUTH rest api)和 API_KEY。据我了解,API_KEY is not private.

因此,即使我正确设置了安全规则,使用户只能读取和写入他的数据,他仍然可以通过 REST API 访问和更改数据。这可能会破坏我的数据模型,因为数据必须以特殊方式构建。

有什么方法可以只允许从应用程序内部访问 firestore 并阻止它进行 REST 调用?

为什么 Firebase API 密钥默认不受限制?

我是否应该像here 描述的那样将密钥限制为只能由 Android APP 使用?

【问题讨论】:

    标签: firebase rest google-cloud-firestore firebase-security


    【解决方案1】:

    您应该在安全规则中验证数据请求,以确保在所有情况下都遵守您的数据结构。 https://firebase.google.com/docs/rules/data-validation

    对于 Rest API,由于它作为公共 API 的一部分内置于 GCP 的核心中,因此无法向外阻止或拒绝它,但是,您可能对 App Check 感兴趣,它可以拒绝来自您的 Android 外部的请求/iOS/网络​​应用 https://firebase.google.com/docs/app-check

    它处于早期测试阶段,可以帮助解决对上述平台的不请自来的滥用行为。

    【讨论】:

    • 好吧,这听起来很有趣,但是 Firestore 呢?好像还不支持。 App Check 目前适用于以下 Firebase 产品:实时数据库、云存储、云函数(可调用函数)
    • 这是真的,但它正在开发中,很可能在不久的将来解决这个问题。最终,真正的重点应该是安全规则和严格的验证。因此,即使用户可以通过 REST API 访问,他们的操作在您的生态系统中也是有效的
    • 但是有什么方法可以区分 App 访问和 REST Api 访问?我想让我的应用程序使用用户的 ID 读取/写入数据库,但是 REST 访问不应该看到整个数据结构,甚至也不应该编辑它。我想让用户只能通过云功能实现的自己的 API 访问。
    • 没有,因为其余 API 具有与应用模块相同的方法,包括编辑和身份验证。如果您愿意,我强烈建议您向 Firebase 提出功能请求
    • 对我来说还是有点难以理解。例如Firebase 身份验证无法定制为仅允许登录而不允许注册。 API_KEY 不必像文档中描述的那样是私有的,但是我们在 Auth 中激活了电子邮件/密码,并且每个人都可以使用 API_KEY,例如创建新用户。我想过让我们的 API 用户直接针对 firebase auth 进行身份验证,并使用 idToken 来使用我们的 API。现在我们正在考虑拥有自己的 /login 端点,它将请求转发到 Firebase Auth。这样我们就不必共享 API 密钥了。
    猜你喜欢
    • 2022-01-24
    • 2014-09-27
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    相关资源
    最近更新 更多