提问者:小点点

对admin-sdk的访问权限进行限制


我正在设计一个应用程序(让我们称之为TodoList应用程序)基于VueJs(用于UI)NodeJs(用于后端,将在Google Cloud Platform中运行)Fi恢复(用于auth数据库)。

我已经浏览了谷歌的巨大留档(有时是多余的!)来实现一些应该有效的东西,但我不确定它是否能证明生产。

情况:

  • 由于Firebase的基于密码的身份验证,用户已登录我的VueJs应用程序(并且用户的凭据,包括他的访问令牌,都存储在我的Vuex商店中)。
  • Firebase管理SDK正在我的后端运行。
  • 我的VueJs应用程序正在请求我的后端。
  • 后端验证客户端请求中发送的访问令牌
  • 多亏了管理SDK,我的后端请求了我的Fi恢复数据库

我已经在我的Fi恢复数据库上设置了一些安全规则:

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId}/{document=**} {
      allow read, write: if request.auth.uid == userId;
    }
  }
}

这样我就不希望任何登录的用户访问来自另一个用户的数据。

问题:

由于Firebase AdminSDK对我的Fi恢复数据库拥有完全权限,我如何确保不会有任何安全问题。目前,我只是在验证发送到我后端的请求中的访问令牌,但是…有些事情让我觉得不对劲!

代码:

在客户端:

auth.onAuthStateChanged((user) => {
  if (user) {
    // Save the user credentials
  }
}

在服务器端:

// idToken comes from the client app (shown above)
// ...
admin.auth().verifyIdToken(idToken)
  .then(function(decodedToken) {
    var uid = decodedToken.uid;
    // Retrieve or add some data in /users/{userId}/{document=**}
  }).catch(function(error) {
    // Handle error
  });

如您所见,一旦我验证了访问令牌并检索了uid,我就可以在我的数据库上做任何事情。

参考文献

  • https://firebase.google.com/docs/admin/setup
  • https://firebase.google.com/docs/auth/admin/verify-id-tokens
  • https://firebase.google.com/docs/reference/admin/node/admin.firestore

谢谢你的帮助!


共2个答案

匿名用户

管理员SDK将始终拥有对数据库的完全访问权限。

由于客户端永远不会直接访问Firebase,您应该完全禁用对所有文档的访问。您的API仍然有权访问

match /{document=**} {
  allow read, write: if false;
}

匿名用户

我认为在从客户端验证访问令牌后,您可以在fireport-admin的资源中发送uid,firesion-admin规则如下所示:

allow read, write: if request.resource.data.uid == userId;