如何向Firebase验证服务器?

时间:2015-03-24 19:10:50

标签: node.js firebase server

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

  • 清理非常规数据,这些数据难以清理使用 onDisconnect handlers
  • 构建超出我能力范围的数据的附加索引 同 queries

1 个答案:

答案 0 :(得分:81)

已更新(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. 访问所有数据,做一些很棒的事情。

  7. 优点

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

    Firebase密码

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

    但严重的是,不要这样做。这很危险。

    不这样做的理由

    • 就像盲目地使用sudo一样,这非常危险。
    • 您 服务器不会尊重您的验证规则。
    • 您的服务器已完整阅读 /写入您的Firebase访问权限。如果它有一个丑陋的bug,它 可能删除或损坏没有业务访问的数据。
    • 您 秘密会在更多地方结束(可能在出站请求日志中, 等等)。如果它出来你会面临更大的风险。