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/Firestore 安全规则是不是安全?