在客户端应用程序中隐藏 firebase 私有凭据
hide firebase private credentials in client apps
我想避免在客户端应用程序中公开私人凭据。道格史蒂文森说 firebase-authentication-vs-firebase-admin :
The reason why you can't use the Firebase Admin SDK in your app is
because you would have to ship private credentials with your app in
order for the SDK to operate
By saying Admin SDK did he mean when we use for example:
import * as admin from "firebase-admin";
那么 :
import firebase from "firebase/app";
firebase.database().ref ... ?
此代码段是否被视为管理 SDK?要配置 firebase,我们仍然需要将私有凭证与我们的客户端应用程序一起发送,这是一个安全漏洞。那么我们是否应该考虑永远不要在客户端应用程序中使用 firebase.database() 或 firebase.firestore() 而是使用云函数?
如果您随应用程序一起提供管理凭据,任何人都可以获取这些凭据并开始以 他们 认为合适的任何方式调用您项目中的任何 API。您无法控制这种用法,因为他们将拥有管理凭据。
因此,您确实不应在应用中使用 Admin SDK,而是将您需要的功能包装在自定义 API 中(例如在 Cloud Function 中),您可以在其中确保其使用已授权。
这与您问题中的第二个片段不同,后者使用来自 Firebase 的常规 JavaScript SDK。这些 SDK 不使用管理凭据访问项目,而是使用此处说明的配置数据:
通过此配置数据进行的访问受到您为项目配置的 server-side 安全规则的保护。因此,尽管用户仍然可以复制配置数据并自行调用 API,但任何访问都必须通过您配置的安全规则。在这些安全规则中,您可以确保他们只能访问他们被授权访问的数据。
但由于 Admin SDK 在设计上绕过了安全规则,因此当您在应用中发送管理凭据时,您将没有该选项。
我想避免在客户端应用程序中公开私人凭据。道格史蒂文森说 firebase-authentication-vs-firebase-admin :
The reason why you can't use the Firebase Admin SDK in your app is because you would have to ship private credentials with your app in order for the SDK to operate By saying Admin SDK did he mean when we use for example:
import * as admin from "firebase-admin";
那么 :
import firebase from "firebase/app";
firebase.database().ref ... ?
此代码段是否被视为管理 SDK?要配置 firebase,我们仍然需要将私有凭证与我们的客户端应用程序一起发送,这是一个安全漏洞。那么我们是否应该考虑永远不要在客户端应用程序中使用 firebase.database() 或 firebase.firestore() 而是使用云函数?
如果您随应用程序一起提供管理凭据,任何人都可以获取这些凭据并开始以 他们 认为合适的任何方式调用您项目中的任何 API。您无法控制这种用法,因为他们将拥有管理凭据。
因此,您确实不应在应用中使用 Admin SDK,而是将您需要的功能包装在自定义 API 中(例如在 Cloud Function 中),您可以在其中确保其使用已授权。
这与您问题中的第二个片段不同,后者使用来自 Firebase 的常规 JavaScript SDK。这些 SDK 不使用管理凭据访问项目,而是使用此处说明的配置数据:
通过此配置数据进行的访问受到您为项目配置的 server-side 安全规则的保护。因此,尽管用户仍然可以复制配置数据并自行调用 API,但任何访问都必须通过您配置的安全规则。在这些安全规则中,您可以确保他们只能访问他们被授权访问的数据。
但由于 Admin SDK 在设计上绕过了安全规则,因此当您在应用中发送管理凭据时,您将没有该选项。