【发布时间】:2017-01-04 14:49:03
【问题描述】:
我有一个用例,我想创建一个 API,允许我的 Firebase Web 应用程序的用户从服务器以编程方式访问他们的 Firebase 实时数据库部分。
我已经探索了几个选项,但如果能获得有关推进的最佳方法的建议,那就太好了。以下是我目前尝试过的:
使用服务帐户 - 最初我考虑让我的应用程序用户访问服务帐户,他们可以在自己的服务器上配置该服务帐户以与 Firebase 实时数据库进行交互。我通过将规则设置为仅允许对具有特定 userId 的节点进行读/写访问,从而限制用户只能访问他们的数据库部分。让用户访问他们的 userId 允许用户写入他们的节点,但不允许其他人写入。这很有效,但是我认为让用户访问 Firebase 服务帐户非常不安全,因此现在不认为这是一种可行的方法。
电子邮件/密码 REST 身份验证 - 我看到这篇关于通过 REST Using mail and password to authenticate via the REST API [Firebase] 进行 Firebase 身份验证的帖子。我已经测试了该方法并且它有效,所以我想我可以使用它来允许用户使用他们的电子邮件和密码从他们的服务器以编程方式登录 Firebase,使用上述方法创建一个令牌,然后实时访问 Firebase数据库使用带有普通 REST 查询的令牌 - https://firebase.google.com/docs/reference/rest/database/#section-param-auth。虽然我认为这会起作用,但我知道它正在使用未记录/不受支持的 API,因此希望尽可能避免。
在 AWS Lambda 中包装 Firebase 服务帐户 - 我尝试的第三个选项是将 Firebase 服务帐户工作人员包装在 AWS Lambda 函数中并使用 AWS API Gateway 创建 API用户可以调用,用户将在请求中包含他们的 userId,并且在 AWS Lambda 上运行的服务帐户工作人员将对请求进行一些验证,然后对 Firebase 实时数据库进行更新。这与选项 1 基本相同,但对用户隐藏了服务帐户凭据,因此我认为这将是安全的。这种方法的缺点是我需要为 Firebase 实时数据库调用和 AWS Lambda / API Gateway 调用付费。
如果有人能就最佳方法提出建议,或者还有其他我没有考虑过的选择,那就太好了!
【问题讨论】:
-
我很想听听您在这方面的进展情况。有没有机会写一篇博文之类的?
标签: rest firebase firebase-realtime-database firebase-authentication