Firebase Functions 如何在没有管理员权限的情况下访问 Firestore
Firebase Functions how to access Firestore without admin privileges
我想实现一个 callable 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 集合 only.
我的问题是:将所有权限授予函数是否安全?逆向工程会很危险吗?如果是这样,我该如何阻止非法函数调用?是否可以限制对 firebase 函数的访问?
无法对云功能进行逆向工程。他们 运行 在安全的环境中。 Admin SDK 确实会绕过所有安全规则,但您有责任授权传入的请求。如果您使用 onCall 函数,Firebase 将在上下文对象中添加调用者的身份验证信息,例如 UID 和自定义声明。
也就是说,您只需要 运行 这么简单的 if-else 逻辑就可以拒绝恶意请求。比如调用方是A,但是请求B的数据,你可以拒绝请求。
请注意,如果您使用的是 onRequest 函数,那么您将传递 ID 令牌,自己在云函数上验证它,即默认情况下不会有 context.auth 个对象。
此外,您可以使用 Firebase App Check 来确保请求仅从您的应用程序中触发。
我想实现一个 callable 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 集合 only.
我的问题是:将所有权限授予函数是否安全?逆向工程会很危险吗?如果是这样,我该如何阻止非法函数调用?是否可以限制对 firebase 函数的访问?
无法对云功能进行逆向工程。他们 运行 在安全的环境中。 Admin SDK 确实会绕过所有安全规则,但您有责任授权传入的请求。如果您使用 onCall 函数,Firebase 将在上下文对象中添加调用者的身份验证信息,例如 UID 和自定义声明。
也就是说,您只需要 运行 这么简单的 if-else 逻辑就可以拒绝恶意请求。比如调用方是A,但是请求B的数据,你可以拒绝请求。
请注意,如果您使用的是 onRequest 函数,那么您将传递 ID 令牌,自己在云函数上验证它,即默认情况下不会有 context.auth 个对象。
此外,您可以使用 Firebase App Check 来确保请求仅从您的应用程序中触发。