node.js - 如何向 Firebase 验证服务器?

标签 node.js firebase server

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

最佳答案

更新 (20160611):如果您在 https://firebase.google.com 上创建项目,从服务器访问数据库的步骤不同。看到这个答案:Is it still possible to do server side verification of tokens in Firebase 3?

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

生成服务器 token 您可以使用相同的 token generator libraries为自定义登录创建以生成可从服务器使用的 token 。然后,您可以根据您的安全规则提供对该服务器的特殊访问权限。

步骤如下:

  1. 获取 token generator library为您的服务器的语言/平台。 Node.js 和 Java 服务器往往工作得最好。
  2. 使用预选的 uid 生成 token 。如果您正在编写 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. 使用 token 来验证您的客户端。这里有更多 node.js 代码:

    var ref = new Firebase("https://<your-firebase>.firebaseio.com/");
    ref.authWithCustomToken(token, function(error, authData) {
      ...
    });
    
  4. 如果您的服务器语言没有客户端,例如PHP,将 REST 请求的 token 用作 auth parameter .

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

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

优势

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

Firebase secret

如果您是那种喜欢生活在边缘的开发人员,请输入 sudo您还可以直接使用您的 Firebase key 进行身份验证。

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

不这样做的理由

  • 就像盲目地使用sudo一样,非常危险。
  • 你的 服务器将不遵守您的验证规则。
  • 您的服务器已完整读取 /对您的 Firebase 的写入权限。如果它有一个足够丑陋的错误,它 可能会删除或损坏没有业务访问权限的数据。
  • 你的 secret 最终出现在更多地方(可能在出站请求日志中, ETC)。如果它泄露出去,您将面临更大的风险。

关于node.js - 如何向 Firebase 验证服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29240940/

相关文章:

node.js - 是否可以在 Visual Studio Code 中分析 NodeJS 程序的内存使用情况

node.js - 在 Docker for Windows 上安装 node-sass 时 npm syscall symlink error -95

javascript - Firebase Cloud Function Transaction write on firestore 会引发等待错误

javascript - 在Firebase函数中,如何在使用后清理数据库引用?

html - Express.js 不发送 css 文件

java - 线程和同步一般方法

nginx - 301重定向时nginx保留端口号

javascript - Rails - 找不到 JavaScript 运行时?

node.js - 如何将数据从 React 发送到 Node 服务器并将结果返回到 React?

web-applications - firebase 云消息传递和 firebase 通知之间有什么区别?