如何为第 3 方开发人员构建安全的 Firestore API:SDK vs Firebase REST API vs https 函数?
How to build a secure Firestore API for 3rd party developers: SDK vs Firebase REST API vs https functions?
我必须使用 Firebase 构建一个 API,并且在设计选择方面需要一些帮助。我希望能够将 API 出售给用户,然后用户可以将其用于 build/integrate 自己的应用程序。用户将拥有读写权限。
一般信息:
- 我正在使用带有电子邮件和密码身份验证的 Firestore 数据库。
- 只有专门指定的用户可以使用 API
- 每个用户只能访问与其相关的特定文件。
我注意到可以通过 3 种不同的方式向我的 Firestore 数据库的用户提供 API:
- https 触发的云函数(https://firebase.google.com/docs/functions/http-events)
- 使用 SDK (https://firebase.google.com/docs/firestore/client/libraries)
- 使用 Firbase 提供的 REST API (https://firebase.google.com/docs/firestore/use-rest-api)
API要求:
- 仅供我特别授予访问权限的用户使用(电子邮件和密码登录)
- 我想限制这些用户只能执行他们能够执行的几个 read/write 任务。
- 需要安全。
我目前的做法是:
- 使用第三个选项 - Firebase 提供的 REST API(从而为用户提供 projectId 和 API 密钥)
- 将授权用户添加到 Firbase 上的授权帐户列表,并使用自定义声明和数据库规则限制访问。
我的问题:
- 似乎在API构建中通常使用https功能(选项1)。选项 2 和 3 不安全吗?
- 这 3 个选项的正常用例是什么?什么时候应该使用,什么时候应该避免?
- 我选择的选项 3 是否存在明显缺陷?
- 如能提供有关做出这些设计决策的任何其他有用信息,我们将不胜感激。
提前致谢
TL;DL:这取决于您想用这个 API 做什么,以及调用它的 devices/users 的数量和类型。
在回答您的问题之前,我将在下面列出每种方法的优点:
- 云函数:
Cloud Function 是一种功能即服务解决方案,因此它也是您的 API 的托管服务,因此您无需配置、管理或升级服务器和 API会根据负载自动缩放。此选项还考虑了 SDK 和客户端库的优点,因为您的代码无论如何都必须使用它来连接到 Firestore。
- SDK 和客户端库:
这是访问 Firestore 的最简单和更优化的方法,但是,运行 无法使用本机库的环境(例如 IOT 设备)将被排除在您的解决方案之外,因此在实施此方法时请考虑这一点选项。
- Cloud Firestore REST API:
每台经过适当授权可以访问 Firestore 的设备都可以访问。
注意:对于 SDK 和 REST API,您需要考虑托管您的 API,或者在 Cloud Functions 上,如前所述,App Engine Standard、App Engine Flex 或 Compute Engine 服务器实例。
综上所述,由您和您的 API 的使用情况和要求决定哪个选项最适合考虑上述几点。
根据安全性,我想说如果 firebase 规则和 firebase 身份验证设置正确,所有选项都是安全的。
我必须使用 Firebase 构建一个 API,并且在设计选择方面需要一些帮助。我希望能够将 API 出售给用户,然后用户可以将其用于 build/integrate 自己的应用程序。用户将拥有读写权限。
一般信息:
- 我正在使用带有电子邮件和密码身份验证的 Firestore 数据库。
- 只有专门指定的用户可以使用 API
- 每个用户只能访问与其相关的特定文件。
我注意到可以通过 3 种不同的方式向我的 Firestore 数据库的用户提供 API:
- https 触发的云函数(https://firebase.google.com/docs/functions/http-events)
- 使用 SDK (https://firebase.google.com/docs/firestore/client/libraries)
- 使用 Firbase 提供的 REST API (https://firebase.google.com/docs/firestore/use-rest-api)
API要求:
- 仅供我特别授予访问权限的用户使用(电子邮件和密码登录)
- 我想限制这些用户只能执行他们能够执行的几个 read/write 任务。
- 需要安全。
我目前的做法是:
- 使用第三个选项 - Firebase 提供的 REST API(从而为用户提供 projectId 和 API 密钥)
- 将授权用户添加到 Firbase 上的授权帐户列表,并使用自定义声明和数据库规则限制访问。
我的问题:
- 似乎在API构建中通常使用https功能(选项1)。选项 2 和 3 不安全吗?
- 这 3 个选项的正常用例是什么?什么时候应该使用,什么时候应该避免?
- 我选择的选项 3 是否存在明显缺陷?
- 如能提供有关做出这些设计决策的任何其他有用信息,我们将不胜感激。
提前致谢
TL;DL:这取决于您想用这个 API 做什么,以及调用它的 devices/users 的数量和类型。
在回答您的问题之前,我将在下面列出每种方法的优点:
- 云函数:
Cloud Function 是一种功能即服务解决方案,因此它也是您的 API 的托管服务,因此您无需配置、管理或升级服务器和 API会根据负载自动缩放。此选项还考虑了 SDK 和客户端库的优点,因为您的代码无论如何都必须使用它来连接到 Firestore。
- SDK 和客户端库:
这是访问 Firestore 的最简单和更优化的方法,但是,运行 无法使用本机库的环境(例如 IOT 设备)将被排除在您的解决方案之外,因此在实施此方法时请考虑这一点选项。
- Cloud Firestore REST API:
每台经过适当授权可以访问 Firestore 的设备都可以访问。
注意:对于 SDK 和 REST API,您需要考虑托管您的 API,或者在 Cloud Functions 上,如前所述,App Engine Standard、App Engine Flex 或 Compute Engine 服务器实例。
综上所述,由您和您的 API 的使用情况和要求决定哪个选项最适合考虑上述几点。
根据安全性,我想说如果 firebase 规则和 firebase 身份验证设置正确,所有选项都是安全的。