Firebase 存储:对 Internet 公开特定目录下的文件

Posted

技术标签:

【中文标题】Firebase 存储:对 Internet 公开特定目录下的文件【英文标题】:Firebase Storage: Public to Internet about files under a specific directory 【发布时间】:2021-12-15 10:40:17 【问题描述】:

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

安全规则

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

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

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

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

我该如何解决这个问题?

【问题讨论】:

【参考方案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。

以上是关于Firebase 存储:对 Internet 公开特定目录下的文件的主要内容,如果未能解决你的问题,请参考以下文章

从firebase函数获取云存储中文件的永久可公开下载URL [重复]

上传图片和 Firebase 显示“用户无权访问此对象”,即使存储设置是公开的

为啥云函数 URL (Firebase) 可以公开访问?如何限制对特定外部呼叫的访问? [复制]

尝试访问公开可用的端点时,部署到 firebase 的 React-app 出现 cors 错误 [重复]

Firebase 存储规则错误:意外标识符;从文档中获取的功能

Firebase 存储安全规则和上传文件的下载令牌