首页 > 解决方案 > 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 功能的访问?

标签: node.jsgoogle-cloud-firestoregoogle-cloud-functionsfirebase-admin

解决方案


云功能无法进行逆向工程。它们在安全的环境中运行。Admin SDK 确实绕过所有安全规则,但您有责任授权传入请求。如果您使用 onCall 函数,Firebase 将在上下文对象中添加调用者的身份验证信息,例如 UID 和自定义声明。

话虽如此,您只需要运行如此简单的 if-else 逻辑来拒绝恶意请求。例如调用者是A,但正在请求B的数据,您可以拒绝该请求。

请注意,如果您使用 onRequest 函数,那么您将传递 ID 令牌,自己在云函数上验证它,即默认情况下不会有 context.auth 对象。

此外,您可以使用 Firebase App Check 确保仅从您的应用程序触发请求。


推荐阅读