【问题标题】:Security in firebase/firestorefirebase/firestore 中的安全性
【发布时间】:2018-10-11 09:14:36
【问题描述】:

在我目前正在进行的一个项目中,我正在使用云 FireStore 和底层数据库。

无论用户是否登录,我都需要我的客户端(iOS 和 Android)能​​够从云 FireStore 读取(根本没有写入访问权限)文档(实际上根本不会使用 firebase 身份验证)。

我不希望任何人能够从应用程序外部访问数据(例如通过 REST 端点)。 我想我需要的是在授予访问权限的应用程序中加入某种 API 密钥,但我不知道该怎么做,谁能指导我正确的方向?

【问题讨论】:

  • 嗯只是问。如果它是一个应用程序,为什么不登录呢?
  • 好吧,内容根本不应该要求用户登录。并非所有用户都想登录。但是当用户实际登录时,他们会通过我们自己的 OAuth 解决方案进行登录,这可能如果我们愿意,可以连接到 Firebase 身份验证,但我试图避免这种情况..
  • 嗯好的。这听起来很奇怪,用户不应该登录 - 但数据仍然不应该公开?
  • 我明白了,这只是因为我不希望从应用程序外部访问数据...
  • 我真的很喜欢你的想法 - 根据位置更改安全性。它类似于基于 IP 地址的保护。我会尽力帮助您调查这是否可行,但我觉得我们需要为 Firebase 团队创建一个功能请求。

标签: firebase authentication google-cloud-firestore api-key


【解决方案1】:

我知道您说您不想使用 Firebase 身份验证,但我认为匿名登录是可行的方法。这将允许他们在不注册/登录的情况下接收 uid,以便您可以在 Firebase/Firestore 安全规则中验证它们。网页版看起来像这样,但它也适用于 Android/IOS。此代码直接取自here

firebase.auth().signInAnonymously().catch(function(error) {
  // Handle Errors here.
  var errorCode = error.code;
  var errorMessage = error.message;
  // ...
});

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
    var isAnonymous = user.isAnonymous;
    var uid = user.uid;
    // ...
  } else {
    // User is signed out.
    // ...
  }
  // ...
});

IOS version
Android version

【讨论】:

  • 你可能是对的。这似乎是要走的路……但这会阻止用户通过 REST API 生成匿名 ID 并以这种方式访问​​数据吗?我需要防止我们的数据通过其他 API 泄​​露...
  • 最终这些数据对任何人都是公开的,因为他们可以通过在您的应用中获取这些数据。应用程序之外的人获取您的数据的可能性是可能的,但可能性很低。如果您真的需要银行级别的安全性,您应该考虑让他们注册一个真实账户。但是有多少应用需要银行级别的安全性?
猜你喜欢
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多