Firebase 存储:向匿名签名用户提供内容,无需令牌

Posted

技术标签:

【中文标题】Firebase 存储:向匿名签名用户提供内容,无需令牌【英文标题】:Firebase Storage: serving content to anonymous signed users without token 【发布时间】:2022-01-07 00:31:46 【问题描述】:

我正在尝试仅将托管在 Firebase Storage 上的图像提供给匿名登录的用户。这是我的存储规则:

service firebase.storage 
  match /b/bucket/o 
    match /allPaths=** 
      allow read: if request.auth.token.firebase.sign_in_provider == "anonymous";
    
  

但这不起作用:

如果我去 https://firebasestorage.googleapis.com/v0/b/project.appspot.com/o/image.png(网址中没有标记)它给了我 403 如果我转到 https://firebasestorage.googleapis.com/v0/b/project.appspot.com/o/image.png?token=tokenId,它会提供图像,但它会提供给任何人(已登录、未登录等)

也尝试使用默认规则:

allow read: if request.auth != null;

同样的事情。模拟器工作正常,但在生产中它不起作用。我是不是忘记了什么?

谢谢!

【问题讨论】:

【参考方案1】:

您显示的第二个 URL 似乎是一个下载 URL,它(根据定义)向拥有该 URL 的任何人授予对该资源的只读访问权限。无法通过下载 URL 的安全规则来保护访问。

第一个 URL 仅在通过 Firebase SDK 访问时有效,或者当您在存储桶上明确设置 Cloud Storage 安全性以允许公共访问时,这将完全绕过 Firebase 安全规则。

Firebase javascript SDK 9.5 刚刚添加了通过 SDK 访问数据的方法,因此我建议您检查一下。

【讨论】:

感谢@Frank van Puffelen - 虽然我找不到关于 Storage getBlob() 的任何文档...仅适用于 Firestore 它们在模块化 SDK 中作为***功能:例如getBlob。看起来它们没有添加到兼容模式库中。

以上是关于Firebase 存储:向匿名签名用户提供内容,无需令牌的主要内容,如果未能解决你的问题,请参考以下文章

Firebase存储安全规则为特定用户提供访问权限

匿名身份验证用户的这个 Firebase/Firestore 安全规则是不是安全?

Firebase 只读,没有来自应用程序的身份验证

Firebase存储下载到用户计算机

如果我在 firebase 身份验证中有很多冗余匿名用户,可以吗? [关闭]

Firebase 匿名 ID 的稳定性如何