【问题标题】:Firebase Storage: Public to Internet about files under a specific directoryFirebase 存储:对 Internet 公开特定目录下的文件
【发布时间】:2023-03-14 20:39:01
【问题描述】:

我想将特定目录下的所有文件发布到互联网上。

安全规则

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /public/{allPaths=**} {
      allow read;
      allow write: if request.auth != null;
    }
  }
}

如上写好安全规则后,当我打开云存储的浏览器时:

  • 目录下的文件仍设置为私有。
  • 如果您查看每个文件的详细信息,您会发现没有发布任何公共 URL。

当我输入Authenticated URL时,你会被重定向到谷歌的登录页面。

我该如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    Firebase 安全规则仅控制谁可以通过 Firebase SDK 或 REST API 获取特定对象的网址。如果您在 Firebase 控制台中检查对象 URL,您会看到一个格式的 URL,这可能就是您要查找的内容:

    https://firebasestorage.googleapis.com/v0/b/[PROJECT].appspot.com/o/public%2Fdog.jpg?alt=media&token=fd991fdf-a33f-4321-9017-09907e1a5243
    

    安全规则只能首先限制用户获取此 URL,但任何拥有此 URL 的人都可以访问图像/文件(如果授权用户共享了该 URL)。

    话虽如此,allow read: if true; 规则将允许任何人公开(如上所示)并且他们可以访问它。


    如果您还想要来自 GCS 的公共链接,那么您必须从 GCP 控制台编辑权限并允许 allUsers 读取它:

    【讨论】:

    • 所以安全规则是不发布公共URL,而只是设置Authenticated URL的范围。谢谢你。但是,在设置了上述安全规则后,当我使用未经身份验证的浏览器打开公共下文件的经过身份验证的 URL 时,我会被重定向到 Google 登录页面。这在我看来就像没有应用安全规则 allow read: if true;
    • @kusumoto_teruya 经过身份验证的 URL 不同...您应该在 Firebase 控制台中检查 URL 或使用此处提到的 Firebase SDK 获取一个:firebase.google.com/docs/storage/web/download-files
    • 哦,对不起。我刚刚注意到,当我打开文件详细信息时,“名称”字段被做成了一个链接。所以我们可以使用这个 URL。
    猜你喜欢
    • 2019-05-14
    • 2021-08-21
    • 2019-09-07
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    相关资源
    最近更新 更多