以客户与文档 reads/writes 的一对一关系保护 read/write 文档
Securing read/write for documents in one to one relation of client to document reads/writes
我有一个 firebase 项目,其中包含一些用云函数构建的读写 API,这些函数将被许多不同的 clients/websites 使用,而无需身份验证。但是,我希望他们只能访问 firestore 中的“他们自己的”文档。 Firestore 模型如下所示:
- companies
- company1
- company2
- company3
- etc...
每家公司应该只能read/write自己的公司文件,不能篡改任何其他文件。对我来说,棘手的部分是了解如何从安全角度让每个网站仅使用此 API,并且仅使用 read/write 到指定的 document_id(当前指定为 pathParam)。这是一个例子:
/companies/${document_id}/bookings
这样一来,company1很容易篡改company2的文档,只需查找company2的网站并从请求中抓取document_id即可。有什么可能的解决方案可以使这种与 firebase 的通信安全?我唯一能想到的是 public/private 请求之间的密钥加密,但我还没有足够的知识来决定这是否是一个好的解决方案,或者是否有更好的解决方案。感谢任何答案,谢谢!
Firestore 提供 Firestore Security Rules, which can be used to restrict access to certain documents within collections based on a condition. However, you need to combine this with Firebase auth,而 Firebase auth 旨在验证用户而不是应用程序。
因此,对于您想要实现的目标,您需要实施用户身份验证机制,我知道这不是您想要的。
据我所知,Firebase 没有提供其他保护 Firestore 数据的方法。我相信您需要自己实施一些东西才能实现您想要的。确实,正如您提到的,Public/private 密钥系统可以解决问题。
感谢何塞的输入!最近几天一直在研究解决方案,我想我很快就会有一个不错的解决方案。我确实使用了 Firebase 身份验证,特别是 使用电子邮件进行身份验证-link,这意味着不需要密码。这对我来说是完美的。我还使用 自定义声明 ,我在其中为代表要更新的 document_id 的每个公司添加自定义声明。这是在每个公司的后端制作的一个微型 cloud-function 中完成的。这样我就不会通过 http 明显地发送任何 document_id,而是这个 document_id 将在 jwt-token 中传递。然后我可以在我的后端服务中从令牌中检索该声明以更新正确的 document_id。并不是说这是完全安全的,因为可以将令牌从一个站点切换到另一个站点并通过 http 发送,并将有效的 POST 变为错误的 document_id。这样做的工作量相当大,而 damage/impact 相当小,因此至少大大降低了有人试图篡改数据的机会。这样我的胃感觉好多了:D
我有一个 firebase 项目,其中包含一些用云函数构建的读写 API,这些函数将被许多不同的 clients/websites 使用,而无需身份验证。但是,我希望他们只能访问 firestore 中的“他们自己的”文档。 Firestore 模型如下所示:
- companies
- company1
- company2
- company3
- etc...
每家公司应该只能read/write自己的公司文件,不能篡改任何其他文件。对我来说,棘手的部分是了解如何从安全角度让每个网站仅使用此 API,并且仅使用 read/write 到指定的 document_id(当前指定为 pathParam)。这是一个例子:
/companies/${document_id}/bookings
这样一来,company1很容易篡改company2的文档,只需查找company2的网站并从请求中抓取document_id即可。有什么可能的解决方案可以使这种与 firebase 的通信安全?我唯一能想到的是 public/private 请求之间的密钥加密,但我还没有足够的知识来决定这是否是一个好的解决方案,或者是否有更好的解决方案。感谢任何答案,谢谢!
Firestore 提供 Firestore Security Rules, which can be used to restrict access to certain documents within collections based on a condition. However, you need to combine this with Firebase auth,而 Firebase auth 旨在验证用户而不是应用程序。
因此,对于您想要实现的目标,您需要实施用户身份验证机制,我知道这不是您想要的。
据我所知,Firebase 没有提供其他保护 Firestore 数据的方法。我相信您需要自己实施一些东西才能实现您想要的。确实,正如您提到的,Public/private 密钥系统可以解决问题。
感谢何塞的输入!最近几天一直在研究解决方案,我想我很快就会有一个不错的解决方案。我确实使用了 Firebase 身份验证,特别是 使用电子邮件进行身份验证-link,这意味着不需要密码。这对我来说是完美的。我还使用 自定义声明 ,我在其中为代表要更新的 document_id 的每个公司添加自定义声明。这是在每个公司的后端制作的一个微型 cloud-function 中完成的。这样我就不会通过 http 明显地发送任何 document_id,而是这个 document_id 将在 jwt-token 中传递。然后我可以在我的后端服务中从令牌中检索该声明以更新正确的 document_id。并不是说这是完全安全的,因为可以将令牌从一个站点切换到另一个站点并通过 http 发送,并将有效的 POST 变为错误的 document_id。这样做的工作量相当大,而 damage/impact 相当小,因此至少大大降低了有人试图篡改数据的机会。这样我的胃感觉好多了:D