node.js - 应用安全规则访问 Firebase 云存储服务器端

标签 node.js firebase google-cloud-firestore firebase-authentication

在我的 Firebase 应用中,我想知道代表登录用户(通过 ID token 进行身份验证)向 Cloud Storage for Firebase 发出服务器端请求的推荐方法,并应用安全规则请求(即不使用 Admin SDK)。

当前的整体应用流程如下所示:

  • 用户登录客户端并向 Google Cloud API 网关发出请求,发送他们的 ID token在请求 header 中
  • API 网关 authenticates user并将请求转发到后端 API 中的不同端点:
    • 如果请求的是 Firebase 身份验证,则 API 使用 Auth Admin SDK直接处理
    • 如果是针对Firestore,API使用API​​网关转发的x-forwarded-authorization请求头(包含客户端原先提供的ID token)到然后向Firestore's REST API提出请求, 以便可以通过安全规则评估请求。

对于 Cloud Storage,我想做一些与上面的 Firestore 案例类似的事情,但文档中没有可用的特定于 Firebase 的 REST API。可以让客户端直接向 Firebase 发出请求(如本 answer 中所建议),但更愿意将逻辑保留在后端。

对于存储,是否有其他替代方法?如果有更好的方法来处理上述 Firebase Auth 和 Firestore 案例,请随时指出。谢谢!

编辑:添加更多我找到的可能的解决方案

  • Doug 的回答 here和弗兰克的回答 here建议使用 Cloud Storage REST API,其中应用程序会为用户和 makes the request 生成 OAuth token
  • 这个答案 here提到可以将 auth=IDTOKEN 查询参数传递给 Firebase REST API:

Once you have an ID token, you can pass that to the REST API via the auth query parameter to authenticate a request. The request respects Firebase Security Rules as if the end user logged into the client was making the request.

最佳答案

使用 Admin SDK 时,无法强制执行 Firebase 的云存储安全规则。 Firebase 没有为 Cloud Storage 提供记录在案的 REST API,我怀疑 Google Cloud REST API for Storage 是否接受 Firebase ID token 。

所以我真的不认为您有很好的选择来代表您的用户从服务器执行此操作。我能想到的两个选项:

  1. 将必要的信息传回客户端,并让客户端通过 Firebase SDK 访问数据 - 在这种情况下,将强制执行安全规则。
  2. 在您的 Cloud Functions 代码中复制必要的安全逻辑。

关于node.js - 应用安全规则访问 Firebase 云存储服务器端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65560842/

相关文章:

javascript - Promise 抛出 "Unhandled promise rejection"错误的奇怪行为

android - Firebase CM 未注册的注册 token

firebase - 即使仅在启用持久性的情况下,仅修改一个文件,Firestore查询仍会再次从数据库中读取所有文档

angular - 错误 NG6002 : Appears in the NgModule. 导入 AppModule,但无法解析为 NgModule 类

javascript - 创建具有关联外键的新模型实例/记录

node.js - 如何使用无服务器模块在本地调试 AWS Lambda Node.js?

node.js - Karma 安装在重建 npm node.js 时失败

收到电子邮件后触发 firebase 功能

swift - 闭包调用中的额外参数

java - 如何将自定义对象数组添加到 Firestore 文档字段?