首页 文章

使用Firebase 3创建API

提问于
浏览
5

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

我已经探讨了几个选项,但是对于推进最佳方法的推荐会很棒 . 这是我到目前为止所尝试的内容:

  • Using a Service Account - 最初我考虑过让我的应用程序用户访问他们可以在自己的服务器上配置的服务帐户,以便与Firebase实时数据库进行交互 . 我通过将规则设置为仅允许具有特定userId的节点上的读/写访问来限制用户仅访问其数据库部分 . 让用户访问其userId允许用户写入他们的节点,但没有其他人 . 但是,我认为让用户访问Firebase服务帐户是非常不安全的,因此现在已经将此作为一种可行的方法 .

  • Email / Password REST Auth - 我通过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,所以如果可能的话,我们希望避免使用它 .

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

如果有人能就最好的方法提出建议,或者我还有其他选择没有考虑过,那就太棒了!

1 回答

  • 1

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

    tl;博士:我投票#2 .

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

    #3 - 我认为这实际上可以正常工作 . AWS added the ability to authenticate API Gateway calls,如果你想做一个简单的自动扩展Google Cloud Compute(或最终的 Cloud 功能),Google Cloud Endpoints看起来他们将具有相同的身份验证请求的能力,尽管可能更紧密地集成到 firebase auth . 你甚至可以抽象出所有 firebase auth 依赖并使用 API keys, 所以你的所有用户看到的都是一个普通的 API 界面 . 我想你可以用 firebase-admin 套件设置你自己的 uid ,这样一个1:1 API Key:Firebase UID 映射可以做到这一点 .

    #2可能是一种解决方法,但由于你已经使它工作,这似乎是一个简单的选择 . 虽然我认为你是正确的,这是对该功能的一种书外使用并且可能会改变,但它现在已经足够好了,并且回想起过早的优化是所有邪恶的根源:)

相关问题