如何向 Firebase 验证服务器?

2024-01-12

我有一个在 Firebase 上编写的应用程序。安全规则和客户端代码不足以使我的应用程序正常工作。我需要连接服务器来执行一些任务:

  • 清理难以清理的非规范化数据断开连接时 处理程序 https://www.firebase.com/docs/web/guide/offline-capabilities.html#section-presence
  • 为我的数据构建超出我能力范围的额外索引 和queries https://www.firebase.com/blog/2014-11-04-firebase-realtime-queries.html

更新(20160611):如果您在以下位置创建项目https://firebase.google.com https://firebase.google.com,从服务器访问数据库的步骤是不同的。看这个答案:是否仍然可以在 Firebase 3 中对令牌进行服务器端验证? https://stackoverflow.com/questions/37408684/is-it-still-possible-to-do-server-side-verification-of-tokens-in-firebase-3

您可以通过两种方式执行此操作:生成服务器身份验证令牌,或使用 Firebase 密钥。

生成服务器令牌您可以使用相同的令牌生成器库 https://www.firebase.com/docs/web/guide/login/custom.html为自定义登录创建,以生成可从服务器使用的令牌。然后,您可以根据安全规则提供对此服务器的特殊访问权限。

步骤如下:

  1. Get the 令牌生成器库 https://www.firebase.com/docs/web/guide/login/custom.html#section-rest-token-helper-libraries适用于您服务器的语言/平台。 Node.js 和 Java 服务器往往效果最好。
  2. 使用预先选择的 uid 生成令牌。如果您正在编写 Node.js 服务器,代码可能如下所示:

    var FirebaseTokenGenerator = require("firebase-token-generator");
    var tokenGenerator = new FirebaseTokenGenerator("<your-firebase-secret>");
    var token = tokenGenerator.createToken(
       {uid: "my-awesome-server"}, 
       { expires: <far_into_the_future_seconds> });
    
  3. 使用令牌来验证您的客户端。这是更多的 Node.js 代码:

    var ref = new Firebase("https://<your-firebase>.firebaseio.com/");
    ref.authWithCustomToken(token, function(error, authData) {
      ...
    });
    
  4. 如果您的服务器语言没有客户端,例如PHP,使用 REST 请求的令牌作为auth范围 https://www.firebase.com/docs/rest/guide/retrieving-data.html#section-rest-uri-params.

  5. 更新您的安全规则以授予您的服务器特殊权限(由 uid 标识),例如这个允许对整个 Firebase 进行读取访问的简单规则

    {
        "rules": {
            ".write": false,
            ".read": "auth.uid === 'my-awesome-server'"
        }
    }
    
  6. 访问所有数据,做一些很棒的事情。

优点

  • 这是 Firebase 官方推荐的对服务器进行身份验证的方法。
  • 您的服务器将遵守验证规则。
  • 服务器只是另一个用户。您可以使用安全规则来提供对数据的细粒度访问。
  • 由于访问是细粒度的,因此服务器中的错误不太可能造成损坏,例如删除根节点。

Firebase 秘密

如果您是那种喜欢生活在边缘的开发人员,并且类型sudo http://xkcd.com/149/您还可以直接使用您的 Firebase 密钥进行身份验证。

但说真的,不要这样做。这很危险。

不这样做的理由

  • 就像盲目使用一样sudo,这是非常危险的。
  • 你的 服务器不会尊重您的验证规则。
  • 您的服务器已完整阅读 / 对 Firebase 的写入权限。如果它有一个足够丑陋的错误,它 可能会删除或损坏无业务访问的数据。
  • 你的 秘密最终会出现在更多地方(可能在出站请求日志中, ETC)。如果它泄露出去,您将面临更大的风险。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何向 Firebase 验证服务器? 的相关文章

随机推荐

  • Ravendb - 自动生成自己的密钥

    我当前有一个对象 它有一个名为 Id 的公共属性 当我存储对象时 我希望 Id 成为数据的一部分 而不是像当前那样成为文档 Id 创建文档存储时 我仅设置连接字符串 using var session documentStore OpenS
  • 无法在 Intellij 中运行 Scala 文件

    我在 Intellij IDEA 14 4 社区版中建立了一个加特林项目 我安装了 Scala 插件 并且项目配置似乎是正确的 因为我没有看到内联错误并且编译工作正常 不过 我在一些教程中指出 您也可以通过右键单击当前文件并选择运行或调试来
  • 停止 ruby​​ http 请求修改标头名称

    我正在 ruby 中执行 http 请求 http Net HTTP new uri host uri port req Net HTTP Post new uri path req body payload req customehead
  • 如果包含一个空格,Pandas 将名称列拆分为名字和姓氏

    假设我有一个 pandas DataFrame 其中包含如下名称 name df pd DataFrame name Jack Fine Kim Q Danger Jane Smith Juan de la Cruz name 0 Jack
  • 索引所有列

    知道索引列会带来更好的性能 那么是否值得对数据库的所有表中的所有列进行索引 这种方法的优点 缺点是什么 如果值得的话 有没有办法在SQL Server中自动创建索引 我的应用程序动态添加表和列 取决于用户配置 我希望它们自动索引 由于上述原
  • PHPUnit - 通过命令行测试运行程序运行特定的测试套件[重复]

    这个问题在这里已经有答案了 是否可以通过命令行测试运行程序从配置文件指定要运行哪个测试套件 例如 如果我有以下 xml 配置
  • 刷新元素组

    我有一个 JSF 页面 它本质上只是数据行和列 每行的数据都来自类实例的属性 每行上都有一个链接 单击该链接时会调用一个支持 bean 方法来刷新该行上的数据 行由代表其下方的行组的标题分隔 我也想将标题设为链接 以便它将刷新其下方的所有行
  • 将数组转换为对象

    我正在尝试编写一个函数 它接受一个数组数组 并返回一个对象 其中数组中的每对元素作为键值对 我搜索了堆栈溢出并提出了以下代码 但是 我下面的代码仅返回第一个数组 make Ford 我的代码不返回其余的数组 关于为什么我的函数不返回数组数组
  • 链接到类的 PyCharm 文档字符串

    IntelliJ IDEA 允许链接到 Java 文档注释中的其他方法 这允许我将光标移动到符号上并使用键盘快捷键跳转到定义 以及在按住 ctrl 的同时将鼠标悬停在可单击的符号下方显示下划线 例如 This is a link to a
  • 在尝试导入插件之前使用 fullcalendar lib

    我在 Angular 9 项目中安装了 FullCalendar 5 然后我在浏览器控制台中收到此错误 并且页面中出现任何内容 vdom js 3 Uncaught Error Please import the top level ful
  • 防止页面上每个 Dojo xhr 请求中的缓存

    我可以使用以下命令拦截 Dojo 1 6 1 xhr 请求IO 管道主题如此处所述 Dojo 拦截 XHR 调用 https stackoverflow com questions 4781018 dojo intercepting xhr
  • 如果已删除,则从 NuGet 获取 DLL

    我在 NuGet 上阅读了相当多的内容 但似乎找不到我想要的东西 本质上 我希望它能像 Apache Ivy 一样工作 您只需签入您的配置文件 没有任何二进制文件 并告诉 NuGet 获取所有 DLL 从而使您免于对大量 DLL 进行版本控
  • 如何将 @tailwind CSS 规则添加到 CSS 检查器

    顺风 CSS https tailwindcss com docs what is tailwind adds a tailwind CSS at被标记为未知的规则 我怎样才能避免这个错误 例如 styles css tailwind pr
  • 从 JavaScript 使用 XML WCF REST Web 服务

    我有一个公开 REST WCF 服务的 WPF 应用程序 通过WebServiceHost 合同看起来像这样 简化 ServiceContract public interface IItemServiceContract WebGet U
  • 使用 Grails Spring Security CAS 插件重定向循环

    我正在处理一个涉及 CAS 服务器的项目 该项目使用单点登录 SSO 与其他基于 Spring 的项目一起使用 但我收到了涉及 Grails spring security cas 插件的重定向循环 版本 spring security C
  • 不工作

    我的 Web config 包含以下内容
  • 将 double 转换为 QString

    我正在用 Qt 编写一个程序 我想转换一个double into a QString in C 使用 QString 的 number 方法 文档是here https doc qt io qt 5 qstring html number
  • Spark 读取为 jdbc 将所有行返回为列名

    我正在 Scala 2 12 中使用 Spark 3 x SQL 查询 Spark 的数据库表 我遵循了互联网上给出的示例 我正在使用的数据库 Spark SQL的数据库并使用Centos 7 我正在查询的表 示例 具有以下列 create
  • Json.Net 无法序列化为流,但可以正常序列化为字符串

    在内部 JsonConvert SerializeObject obj Formatting Indented 归结为 JsonSerializer jsonSerializer JsonSerializer Create null Str
  • 如何向 Firebase 验证服务器?

    我有一个在 Firebase 上编写的应用程序 安全规则和客户端代码不足以使我的应用程序正常工作 我需要连接服务器来执行一些任务 清理难以清理的非规范化数据断开连接时 处理程序 https www firebase com docs web