【问题标题】:Firebase/Google Cloud Storage file securityFirebase/谷歌云存储文件安全
【发布时间】:2019-02-16 12:37:52
【问题描述】:

我正在尝试找出使用 Google 服务处理文件访问的最明智的方法。

简化场景,我们有

  • 可以使用 Google、Facebook 等进行身份验证的用户(任意数量),即不一定使用 Google 帐户。
  • 用户可以属于任意数量的组(相当于 Slack 频道),对一个组中可以有多少用户或一个用户可以属于多少组没有限制。
  • 每个文件属于一个组。

在理想的(对我而言)世界中,我应该能够提供(快速)云功能,以验证每个请求的访问权限,做任何我想做的事。我试过了,我确实有一个功能可以进行检查(通过查询 firestore)并生成一个短暂的签名 URL。它确实有效,但该功能的启动速度可能真的很慢,即使在最佳情况下(根本不需要冷启动),它仍然需要大约 400 毫秒,当文件是应该立即弹出的小图像时,这很明显。

因此,下一个替代方案是使用 Firestore 安全规则。我遇到的问题是(显然)我无法在任何地方检查组成员身份(注意:对我们来说,“组”是 /users/$uuid/ 中包含组 ID 列表的集合)。

我考虑将组作为令牌中的声明,但由于声明只能使用 1000 个字节,因此该解决方案是行不通的。

还有 Google 群组,但如果我正确阅读了文档,您只能将 Google 帐户添加到群组中(我的意思是,直接使用存储来处理访问,而不是使用 Firebase 安全性)。

这似乎是一个非常标准的问题,但到目前为止我看到的每种方法都有一些缺点,这对我们来说是无效的。

【问题讨论】:

    标签: firebase google-cloud-storage firebase-storage firebase-security


    【解决方案1】:

    与其让函数产生文件的 url,不如让它产生文件的全部内容。这将关闭其他人获取该网址的机会之窗。缺点是您会为数据传输支付更多费用,但定制的跨产品安全控制通常并不便宜。

    【讨论】:

    • 没有大小限制吗?有些文件很大(作为一部完整的电影,有几 GB)。
    • 我认为你可以用CF发送10MB左右。
    • 所以你会说云功能是(除了性能之外)可以处理 N 对 N 用户对组关系的唯一解决方案吗?
    • 这是构建跨产品规则的唯一方法。您无法使用 Firestore 中的规则保护存储中的文件。而且您无法使用存储规则保护 Firstore 中的文档。您已经正确地将身份验证自定义声明标识为可以弥合差距的一项数据,但它也不能满足您的需求。 AFAIK 对您的问题没有一个干净的解决方案,因为您的要求超出了产品的限制。
    猜你喜欢
    • 2021-03-19
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2017-05-06
    • 2016-10-12
    • 1970-01-01
    相关资源
    最近更新 更多