我为我们的Firebase存储设置了规则,仅允许经过身份验证的用户与之交互。
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /something/{allPaths=**} {
allow read, write: if request.auth.uid != null;
}
}
}
但是,当我浏览保存在Firebase控制台存储中的资产的详细信息时,我确实会为其中的每一个找到一个公开打开这些资产的链接(当我打开文件的详细信息时),例如:
https://firebasestorage.googleapis.com/v0/b/${my-project}.appspot.com/o/${my-file}?alt=media&token=49385ae5-4df6-44ef-a313-8d1f07b59111
我的猜测是这个链接是downloadURL
,并且通过令牌
授予公共访问权限。
因此,我理解存储内容实际上并不是完全私有的,因为即使我设置了严格的规则,即使我个人和我的应用程序没有生成下载URL,Firebase仍然会为每个文件自动生成这样的网址,因此,即使很难找到令牌,内容无论如何都是可以在线公开访问的。
我的理解是否正确?
或者我在Firebase控制台中找到的链接不是下载网址,而是一个临时链接,分别是控制台提供的过期生命令牌?
或者是否可以将Firebase存储桶设置为永远不生成任何下载链接?
任何拥有有效令牌的下载URL的人都可以从任何地方访问内容。然而,如果你从不向任何人公开URL,任何人基本上都不可能猜测URL,即使他们知道路径。令牌是随机的,包含大量熵。
如果你担心有人用正确的记号猜测这个URL,你也应该担心宇宙中两个随机原子相互碰撞。(这有点夸张,但是如果你假设记号的每个字符都是有效的十六进制数字,你可以做数学计算。)
如果您仍然偏执,并且根本不想生成任何下载URL,则必须手动撤销下载URL令牌,并使用不会创建下载URL的上传技术,并且永远不要在客户端应用程序的任何文件上调用getDownloadUrl。