使用 Firebase 时如何保护客户端源
How to protect client source when using Firebase
我知道 Firebase 是一个很好的解决方案,我们不需要过多关注后端/服务器端开发。
但是由于所有代码都在客户端,(如果我们使用javascript/html5作为客户端,很容易解包),我们如何保护客户端代码?
因为我们有一个标准的服务器端(Firebase 后端服务),任何获得我们 javascript/html 客户端的人都可以简单地编辑 URL 我们的客户端并发布他们自己的新客户端应用程序。
有什么解决办法吗?
你是对的,完全可以对你的前端代码进行逆向工程。如果您的某些业务逻辑应该保密(也就是您的 "secret sauce"),在 Firebase 项目中推荐的方法是在您的后端实现它。
最 common/easy 的解决方案是使用 Cloud Functions,因为它们利用了 Firebase 服务的无服务特性,并且与其他服务(数据库、云存储、Auth、等等...).
具体来说,您将编写一个或多个直接从前端触发的 Cloud Functions(参见 Callable Cloud Functions or HTTPS Cloud Functions, which can be seen as similar to REST API endpoints) or by a background event (e.g. new Document in Firestore, new file in Cloud Storage, etc.), or on a schedule way。
另一种解决方案是在您自己的应用程序服务器中实现此秘密业务逻辑,并公开您将从前端调用的 API。您的服务器可以通过 Admin SDK(可用于 Node.js、Java、Go、C# 和 Python)与 Firebase 后端交互。
我知道 Firebase 是一个很好的解决方案,我们不需要过多关注后端/服务器端开发。
但是由于所有代码都在客户端,(如果我们使用javascript/html5作为客户端,很容易解包),我们如何保护客户端代码?
因为我们有一个标准的服务器端(Firebase 后端服务),任何获得我们 javascript/html 客户端的人都可以简单地编辑 URL 我们的客户端并发布他们自己的新客户端应用程序。
有什么解决办法吗?
你是对的,完全可以对你的前端代码进行逆向工程。如果您的某些业务逻辑应该保密(也就是您的 "secret sauce"),在 Firebase 项目中推荐的方法是在您的后端实现它。
最 common/easy 的解决方案是使用 Cloud Functions,因为它们利用了 Firebase 服务的无服务特性,并且与其他服务(数据库、云存储、Auth、等等...).
具体来说,您将编写一个或多个直接从前端触发的 Cloud Functions(参见 Callable Cloud Functions or HTTPS Cloud Functions, which can be seen as similar to REST API endpoints) or by a background event (e.g. new Document in Firestore, new file in Cloud Storage, etc.), or on a schedule way。
另一种解决方案是在您自己的应用程序服务器中实现此秘密业务逻辑,并公开您将从前端调用的 API。您的服务器可以通过 Admin SDK(可用于 Node.js、Java、Go、C# 和 Python)与 Firebase 后端交互。