【问题标题】:Firebase Functions how to access Firestore without admin privileges [duplicate]Firebase Functions如何在没有管理员权限的情况下访问Firestore [重复]
【发布时间】:2021-10-28 05:02:27
【问题描述】:

我想实现一个可调用 Firebase 云函数来修改 Firestore 上的现有文档。当我在网上搜索时,我发现我需要为我的服务器添加管理员权限然后调用它:

const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();

但在文档中(https://firebase.google.com/docs/admin/setup)它说 admin SDK 提供了操作 Firebase 平台中基本上所有内容的权限。我不想将所有权限授予函数调用或服务器。如果我调用与用户集合相关的函数,我希望该函数能够操作用户集合。

我的问题是:赋予函数所有权限是否安全?逆向工程会有危险吗?如果是这样,我如何阻止非法函数调用?是否可以限制对 firebase 功能的访问?

【问题讨论】:

  • 无法通过 Admin SDK 以普通用户身份访问 Firestore。在 Nicolas 对我链接的问题的回答中,他展示了使用常规 JavaScript SDK 完成您想要的功能的能力。更常见的方法是通过您自己的代码确保调用用户的授权,基于context.auth 变量,如firebase.google.com/docs/functions/… 所示

标签: node.js google-cloud-firestore google-cloud-functions firebase-admin


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    相关资源
    最近更新 更多