将 Firebase 读/写权限限制为只有我自己

Posted

技术标签:

【中文标题】将 Firebase 读/写权限限制为只有我自己【英文标题】:Restricting Firebase read/write access to only myself 【发布时间】:2017-01-01 05:09:50 【问题描述】:

我有一个运行的静态网站:

config =
  apiKey: "HIDDEN"
  authDomain: "HIDDEN"
  databaseURL: "HIDDEN"
  storageBucket: ""

firebase.initializeApp(config)

在浏览器中(它被编译为 javacript)以通过 Firebase 的服务器进行身份验证。

我在这里感到困惑吗?这是从浏览器向 Firebase 进行身份验证的有效方法吗?我从他们的“网络”教程中获得了代码,所以我认为它是。

现在,我需要配置我的 Firebase 数据库规则,以便 只有我自己 可以读取和写入它。

我怎么能做到这一点?这个例子够吗?

这是仅允许对经过身份验证的用户进行读/写的给定示例


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

【问题讨论】:

【参考方案1】:

firebase.initializeApp(config) 不会对您进行身份验证,它只是在 Firebase 服务器上识别您的项目。这相当于您必须知道您的家庭住址才能知道下班后去哪里。知道地址是先决条件,但这还不足以获得访问权限。

如果您想将数据访问权限限制为“只有您自己”,这意味着您必须首先在 Firebase 中表明自己的身份。您可以使用Firebase Authentication 执行此操作。例如,要使用电子邮件+密码登录,您需要这样做:

firebase.auth().signInWithEmailAndPassword(email, password)

阅读documentation for email+password authentication 了解完整步骤。

通过身份验证后,您将获得一个唯一 ID;一个所谓的uid。您可以在 Firebase 控制台的 Auth 选项卡中找到您的 uid

有了这个uid,您可以控制对数据(数据库和存储)的访问。因此,如果您从控制台复制您的 uid 并将其添加到您的安全规则中,那么只有您(或知道您的电子邮件+密码的人)可以访问数据库:


  "rules": 
    ".read": "auth.uid == 'e836f712-4914-41df-aa80-5ade6b8b7874'",
    ".write": "auth == 'e836f712-4914-41df-aa80-5ade6b8b7874'"
  

请注意,我在此 sn-p 中添加了我自己的 uids 之一。就像知道您的 API 密钥或数据库 URL 不是安全风险一样,知道我的 uid 也不是。知道我是 Stack Overflow 上的 Frank van Puffelen user:209103,并不意味着你可以冒充我。

【讨论】:

谢谢,Frank,很高兴知道您的团队正在关注新手,我很高兴开始使用 Firebase 进行构建。 我期待看到您构建 Max! 我知道 cmets 不是为了在这里说谢谢,但@FrankvanPuffelen 这个答案对我帮助很大!我一直在寻找这个基本信息,由于某种原因,Firebase 文档似乎总是忽略基本信息。谢谢! @FrankvanPuffelen:我一直在想:使用像"auth.token.email == 'my-email@gmail.com' && auth.token.email_verified == true" 这样的规则会不会更不安全? (PS:这些确切的字段可能特定于 Firebase 的较新版本,也可能不特定。)【参考方案2】:

您问题中的规则将允许任何经过身份验证的用户读取和写入数据库中的任何密钥。如果出于开发目的,您希望配置单个用户并仅限该用户访问,则可以使用以下规则:


  "rules": 
    ".read": "auth !== null && auth.uid === '<your-uid>'",
    ".write": "auth !== null && auth.uid === '<your-uid>'"
  

&lt;your-uid&gt; 是您希望用来登录的用户的 用户 UID - 您可以在 Firebase 控制台的 Auth 下找到它(如果您还没有这样做)。

通常情况下,Firebase 会进行配置,以便用户可以创建帐户,并使用更细粒度的规则来授予用户对数据库特定部分的读写权限。

【讨论】:

以上是关于将 Firebase 读/写权限限制为只有我自己的主要内容,如果未能解决你的问题,请参考以下文章

如何只允许特定用户在 Firebase 中创建新用户?

将 Firebase 安全性限制为特定的 Google Apps 域? [复制]

Linux文件目录权限

使用 Flutter 的 Firebase 读/写规则不起作用?

Firebase 数据库规则权限被拒绝但模拟工作

Firebase 以管理员身份进行身份验证