【问题标题】:Creating an API with Firebase 3使用 Firebase 3 创建 API
【发布时间】:2017-01-04 14:49:03
【问题描述】:

我有一个用例,我想创建一个 API,允许我的 Firebase Web 应用程序的用户从服务器以编程方式访问他们的 Firebase 实时数据库部分。

我已经探索了几个选项,但如果能获得有关推进的最佳方法的建议,那就太好了。以下是我目前尝试过的:

  1. 使用服务帐户 - 最初我考虑让我的应用程序用户访问服务帐户,他们可以在自己的服务器上配置该服务帐户以与 Firebase 实时数据库进行交互。我通过将规则设置为仅允许对具有特定 userId 的节点进行读/写访问,从而限制用户只能访问他们的数据库部分。让用户访问他们的 userId 允许用户写入他们的节点,但不允许其他人写入。这很有效,但是我认为让用户访问 Firebase 服务帐户非常不安全,因此现在不认为这是一种可行的方法。

  2. 电子邮件/密码 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,因此希望尽可能避免。

  3. 在 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


【解决方案1】:

我一直在寻找解决类似问题的方法,因此请记住,我还没有实施解决方案的第一手经验。

tl;dr:我投票#2。

#1 - 我认为,如果您可以从授权/身份验证的角度使服务帐户工作,那么您将不得不在 Google Cloud 仪表板中管理多个服务帐户,从而为您的应用增加一个全新的复杂层.

#3 - 我认为这实际上可以正常工作。 AWS added the ability to authenticate API Gateway calls,如果你想做一个简单的自动缩放谷歌云计算(或云函数,最终),Google Cloud Endpoints 看起来他们将具有相同的验证请求的能力,尽管可能更紧密地集成到 @ 987654323@。您甚至可以抽象出所有firebase auth 依赖并使用API keys,,因此您的所有用户看到的都是一个普通的API 接口。我认为您可以使用 firebase-admin 套件设置自己的 uid,因此 1:1 API Key:Firebase UID 映射可以解决问题。

#2 可能是一种解决方法,但既然你已经让它工作了,这似乎是一个简单的选择。虽然我确实认为你是对的,这是对该功能的一种书外用法并且可能会改变,但现在已经足够好了,请记住,过早的优化是万恶之源 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多