Firebase 存储身份验证

Posted

技术标签:

【中文标题】Firebase 存储身份验证【英文标题】:Firebase storage authentication 【发布时间】:2021-07-30 17:05:22 【问题描述】:

我想通过存储规则和对经过身份验证的用户的自定义声明来限制对 Firebase 存储对象的访问。这两个很酷的功能,适合缩放。

我的问题是:

Firebase 存储下载链接允许公共访问,无论规则如何。

getDownloadURL() 给出的我的下载链接是: https://firebasestorage.googleapis.com/v0/b/***myappname***.appspot.com/o/logos%2F1618740110634.png?alt=media&token=bdf6a5c5-54a2-4211-aa40-85177a38210a

我的规则是:

match /allPaths=** 
  allow read, write: if false;

然后我应该使用什么链接来限制对经过身份验证的用户的访问以及检查我的管理(excel 报告)文件的自定义声明?我很困惑。

已尝试直接链接,没有末尾的令牌,给定的存储位置链接。 通过公共链接,任何人都可以访问我不希望他们拥有的访问权限。

使用 Flutter 移动和网络。

【问题讨论】:

【参考方案1】:

getDownloadURL() 始终返回公共 URL。拥有该文件的每个人都可以访问该文件。

存在短暂的 signed 令牌 URL,但本机设备 SDK 不支持它们。

downloadURL 非常安全。如果有人没有它,没有人会得到你的文件。所以这里的魔力是不要分享它,并且只使用参考来获得你想要的东西。只有当某人有权访问您的参考(根据存储规则)时,他才能生成downloadURL

我建议您仅使用这些引用在您的应用中工作,并且仅在您真正想在应用中访问文件或打开它时获取downloadURL

在 Firebase 存储规则中,您可以使用 authcustomClaims 来定义谁可以访问文件引用。

一旦生成downloadURL,firebase 存储规则就无关紧要了。可以通过该链接访问该文件。

【讨论】:

感谢您为我阐明了整个设置。这更有意义。我了解规则适用于请求下载网址的时间。非常感谢!

以上是关于Firebase 存储身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:使用谷歌身份验证在 Firebase 存储中实施任何身份验证失败

通过 Firebase 身份验证和存储设置文件上传限制,中间没有服务器?

Flutter Firebase 存储:请求没有身份验证令牌

将文件上传到 Firebase 存储时出现身份验证错误

将 REST API 用于 id 令牌时对 Firebase 存储进行身份验证

使用私有Google存储的Firebase iOS SDK身份验证