【问题标题】:How do you authenticate a server to Firebase?如何向 Firebase 验证服务器?
【发布时间】:2015-05-28 06:06:42
【问题描述】:

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

【问题讨论】:

    标签: node.js firebase server


    【解决方案1】:

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

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

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

    步骤如下:

    1. 为您的服务器的语言/平台获取token generator library。 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 parameter

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

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

    优势

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

    Firebase 机密

    如果您是那种喜欢生活在边缘的开发者,并且会立即输入sudo,您还可以直接使用您的 Firebase 密码进行身份验证。

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

    不这样做的理由

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

    【讨论】:

    猜你喜欢
    • 2017-10-30
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2010-10-31
    • 1970-01-01
    • 2019-02-14
    • 2019-05-10
    相关资源
    最近更新 更多