在客户端应用程序中隐藏Firebase专用凭据

问题描述

我想避免在客户端应用程序中公开私人证书。道格·史蒂文森(Doug Stevenson)说firebase-authentication-vs-firebase-admin

您无法在应用中使用Firebase Admin SDK的原因是 因为您将必须随同您的应用一起发布私人证书 命令SDK运行 说Admin SDK的意思是说我们在使用例如:

import * as admin from "firebase-admin";

那:

import firebase from "firebase/app";
firebase.database().ref ... ?

代码段是否被视为admin SDK?要配置Firebase,我们仍然需要使用客户端应用程序附带私人证书,这是一个安全漏洞。那么我们应该考虑不要在客户端应用中使用firebase.database()或firebase.firestore()而是使用云函数吗?

解决方法

如果您在应用程序中附带了管理凭据,那么任何人都可以获取这些凭据并以他们认为合适的任何方式开始在项目上调用任何API。您将无法控制这种用法,因为它们将具有管理凭据。

因此,您确实不应在应用程序中使用Admin SDK,而应将所需的功能包装在自定义API(例如Cloud Function)中,以确保其使用得到授权。


这与您问题中的第二个片段不同,后者使用了Firebase的常规JavaScript SDK。这些SDK不使用管理凭据来访问项目,而是使用此处说明的配置数据:Is it safe to expose Firebase apiKey to the public?

通过此配置数据进行的访问受到为项目配置的服务器端安全规则的保护。因此,尽管用户仍然可以复制配置数据并自行调用API,但是任何访问都必须通过您配置的安全规则。然后在这些安全规则中确保您只能访问他们被授权访问的数据。

但是,由于Admin SDK通过设计绕过了安全规则,因此在您的应用中发布管理凭据时,您将没有该选项。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...