node.js - Firebase Functions 如何在没有管理员权限的情况下访问 Firestore
问题描述
我想实现一个可调用的Firebase 云函数来修改 Firestore 上的现有文档。当我在网上搜索时,我发现我需要为我的服务器添加管理员权限,然后调用它:
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
但在文档(https://firebase.google.com/docs/admin/setup)中,它说 admin SDK 提供了操作 Firebase 平台中基本上所有内容的权限。我不想将所有权限授予函数调用或服务器。如果我调用与 User 集合相关的函数,我希望该函数能够仅操作 User 集合。
我的问题是:将所有权限授予功能是否安全?逆向工程会有危险吗?如果是这样,我如何阻止非法函数调用?是否可以限制对 firebase 功能的访问?
解决方案
云功能无法进行逆向工程。它们在安全的环境中运行。Admin SDK 确实绕过所有安全规则,但您有责任授权传入请求。如果您使用 onCall 函数,Firebase 将在上下文对象中添加调用者的身份验证信息,例如 UID 和自定义声明。
话虽如此,您只需要运行如此简单的 if-else 逻辑来拒绝恶意请求。例如调用者是A,但正在请求B的数据,您可以拒绝该请求。
请注意,如果您使用 onRequest 函数,那么您将传递 ID 令牌,自己在云函数上验证它,即默认情况下不会有 context.auth 对象。
此外,您可以使用 Firebase App Check 确保仅从您的应用程序触发请求。
推荐阅读
- javascript - 将函数应用于对象中的每个键值对
- linux-kernel - 内核错误:IRQ 重映射不支持 X2APIC 模式,禁用 x2apic
- c++ - C++ 类中的 C++ 命名空间声明
- ruby-on-rails - 如何使用 ruby Aws::Lambda::Client SDK 存根响应
- linux - ethtool 中以太网设备的特性是什么意思?如何更改 C 程序中的功能?
- python - 使用for循环和strip函数查找两个字符串中重新出现的字母
- c# - C# - DatePicker 列 (WPF DataGrid) 未注册“行已修改”事件以进行数据库更新
- javascript - HTML mailto form 每次提交时都不会换行
- python - 在将列表传递给 Python 中的函数时如何使列表不区分大小写
- python - groupby([]) 使用新变量,但新变量未在 Pandas 中显示结果