gpt4 book ai didi

firebase - 将 token 添加到 Firebase 存储以确保组安全

转载 作者:行者123 更新时间:2023-12-05 05:07:59 25 4
gpt4 key购买 nike

对于我们的应用程序,我们需要能够为群组提供文件访问权限。每个用户都可以拥有大量的组,因此使用“自定义 token ”解决方案没有意义(无论如何这都很尴尬。

正如我所发现的,Firebase 的存储安全规则非常有限。主要问题是我们将组定义保留在 Firestore 中,而存储安全规则无权访问这些定义。

为了克服这个问题,我们决定在每个上传文件的元数据中包含一个“ token ”,该组中的任何人都可以访问该 token 。当他们下载文件时,他们需要在请求参数中提供此 token (例如/groups/xxx/filename.jpg?token=abc)。

所以我继续写了这些规则:

match /groups/{groupId}/{filename} {
allow read: if request.auth != null && request.params.token == resource.metadata.token;
allow write: if request.auth.uid == userId
&& request.resource.size < 1 * 1024 * 1024
&& request.resource.contentType.matches('image/.*')
&& (resource == null || request.resource.contentType == resource.contentType)
&& imageId.size() < 32
;
}

但是当我在模拟器中运行它时,我收到错误:“错误:simulator.rules 行 [23],列 [43]。属性参数在对象上未定义。”它指向带有“request.params.token”的规则

enter image description here

enter image description here

文档明确指出我们可以从请求对象访问 params 对象:https://firebase.google.com/docs/storage/security/secure-files?authuser=0#request_evaluation

enter image description here

最佳答案

由于 Firebase 能够在 Storage 中查询 Firestore 数据的严重限制以及关于 request.param 不可用的不正确文档,我们不得不使用不同的方法。

我们决定在查询组的文件时使用以下 URL:

/groups/{groupId}/{token}/{filename}

唯一的安全要求是用户必须登录。由于上述 token 是 secret 的并且只对组成员可用,我们发现它非常安全。我们不允许列出目录,因此不可能简单地列出/groups/{groupId} 来查找任何标记。

注意:另一个优化可能是不在路径中包含 {groupId},但我们认为为了调试和管理目的包含更好。

如果有人觉得这是一种不安全的方式,请在评论中告诉我们!

谢谢!

关于firebase - 将 token 添加到 Firebase 存储以确保组安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58644147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com