使用Firebase 3

时间:2016-08-28 13:03:43

标签: rest firebase firebase-realtime-database firebase-authentication

我有一个用例,我想创建一个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服务帐户 - 我尝试过的第三个选项是在AWS Lambda函数中包装Firebase服务帐户工作者并使用AWS API Gateway创建API用户可以调用,用户将在请求中包含他们的userId,并且在AWS Lambda上运行的服务帐户工作人员将对请求执行一些验证,然后对Firebase实时数据库进行更新。这与选项1基本相同,但隐藏了用户的服务帐户凭据,因此我认为这是安全的。这种方法的缺点是我将收到Firebase实时数据库调用和AWS Lambda / API网关调用的费用。

  4. 如果有人能就最佳方法提出建议,或者我还有其他选择没有考虑过,那会很棒!

1 个答案:

答案 0 :(得分:1)

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

tl;博士:我投票#2。

#1 - 我认为,如果您可以从授权/身份验证的角度来看服务帐户的工作,那么您必须通过在Google中管理多个服务帐户,为您的应用添加一个全新的复杂层云仪表板。

#3 - 我认为这实际上可以正常工作。 AWS added the ability to authenticate API Gateway calls,如果您想进行简单的自动扩展Google云计算(或云计算功能,最终),Google Cloud Endpoints看起来他们将具有相同的身份验证请求功能,尽管可能更紧密地集成到<div id="container"> <div id="header">Header</div> <div id="main">Main</div> <div id="footer">Footer</div> </div>的方式。您甚至可以摘除所有firebase auth依赖项并使用firebase auth,这样您的所有用户都会看到正常的API keys,界面。我认为您可以使用API工具包设置自己的uid,因此1:1 firebase-admin映射可以解决问题。

#2可能是一种解决方法,但由于你已经使它成功,它似乎是一个简单的选择。虽然我确实认为你是对的,但这种功能可以随意使用并且可以改变,但现在已经足够好了,并且回想起过早的优化就是根源万恶之物:)