【问题标题】:How to restricts firebase storage access with my own authentication service如何使用我自己的身份验证服务限制 Firebase 存储访问
【发布时间】:2017-04-03 11:09:30
【问题描述】:

我在我的应用程序中使用 firebase 存储,并且我使用自己的用户名和密码身份验证服务,我已将规则更改为公开,以便我可以上传和下载数据,但现在我给了我这个警告

您的安全规则设置为公开。任何人都可以读或写 你的存储桶

如何在不使用任何 Firebase 登录或身份验证方法的情况下保护应用数据??

【问题讨论】:

  • 好吧,如果您没有任何身份验证,我不明白为什么有必要保护您的应用数据?因为,我假设,您希望每个人都能够访问数据。
  • 我的应用程序已通过身份验证,抛出我自己的用户名和密码服务,但应用程序存储不受保护,因为没有来自 firebase 的身份验证,所以我正在寻找一种方法来保护存储数据

标签: android firebase firebase-storage


【解决方案1】:

由于您使用自己的服务来验证用户身份,我可以想到两个选项,都涉及到管理 SDK。

选项 1:创建自定义令牌

假设您通过在您自己的服务器上运行的服务对用户进行身份验证,您可以使用 Firebase Admin SDK 稍微修改该系统以包含自定义令牌。基本上,如果用户提供的详细信息与您的服务预期的详细信息相匹配,您可以返回一个自定义令牌,firebase 可以使用该令牌对用户进行身份验证。然后,您可以像往常一样设置 Firebase 安全规则。这是我推荐的做法。

Create custom tokens

选项 2:完全限制访问并通过您的服务器请求/上传数据

您可以将您的安全规则设置为false,以限制所有人访问。 Admin SDK 应该忽略这些规则,因为它是一个管理实例。然后,您可以让您的用户将文件(或下载请求)上传到您的服务器。然后,您的服务器将使用 Admin SDK 从 Firebase 请求文件并将它们发送回用户。

Firebase Admin SDK

【讨论】:

  • 我从解决方案 1 中得到的是 Firebase Admin SDKi 将为注册到我的服务的任何用户生成自定义令牌,我应该在每次用户尝试登录时检查此令牌,是真的吗?
  • 不完全是。解释得很简单。每次用户尝试登录您的应用程序时,您将他们的用户名和密码发送到您的身份验证服务,如果该用户名/密码组合存在于您的服务器上,您创建一个令牌并将其发送给用户。该令牌基本上对 Firebase 说“此人已在我们的后端验证,应该已登录”。该令牌将允许用户通过 Firebase 进行身份验证。但它会在用户每次尝试登录时创建一个新令牌,而不是在注册时。并不是每个用户都有一套可以重复使用的令牌。
  • 好的,我知道了,但是令牌将由我的服务或 Firebase Admin SDK 生成??这种方法会影响 Firebase 通知的实现吗??
  • 不要认为它会影响 Firebase 通知。而令牌是由 Firebase Admin SDK 通过auth().createCustomToken(uid) 方法生成的。
【解决方案2】:

只为以下授权用户授予读写权限,

"rules": {
  ".read":  "auth != null",
  ".write": "auth != null",
 }
 }

现在您不会收到任何警告。

【讨论】:

  • 但由于没有身份验证,用户将无法上传或下载任何数据
  • 只有授权用户才能访问实时数据库或firebase存储
  • 只有在授权完成后,才会得到数据库引用。
【解决方案3】:

Firebase 规则适用于读取和写入

{
  "rules": {
    "foo": {
      ".read": true,
      ".write": false
    }
  }
}

您可以将变量读取为真,以便其他人可以读取数据,但他们可以写入您的数据。因此您的数据是安全的。 希望你明白了

【讨论】:

  • 你放的规则是针对数据库的,问题是关于存储的
猜你喜欢
  • 1970-01-01
  • 2017-07-11
  • 2020-09-06
  • 2017-03-16
  • 2017-06-28
  • 2022-01-05
  • 2015-07-23
相关资源
最近更新 更多