一尘不染

您如何向Firebase验证服务器?

node.js

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


阅读 386

收藏
2020-07-07

共1个答案

一尘不染

_更新日期(20160611):如果您在https://firebase.google.com上创建了项目,则从服务器访问数据库的步骤有所不同。

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

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

步骤如下:

  1. 获取适用于您服务器语言/平台的令牌生成器库。Node.js和Java服务器往往工作得最好。
  2. 生成带有预选uid的令牌。如果您正在编写一个node.js服务器,则代码可能看起来像这样:

    var FirebaseTokenGenerator = require("firebase-token-generator");
    

    var tokenGenerator = new FirebaseTokenGenerator(““);
    var token = tokenGenerator.createToken(
    {uid: “my-awesome-server”},
    { expires: });

  3. 使用令牌来验证您的客户端。这里是更多的node.js代码:

    var ref = new Firebase("https://<your-firebase>.firebaseio.com/");
    

    ref.authWithCustomToken(token, function(error, authData) {

    });

  4. 如果没有用于服务器语言的客户端(例如PHP),则将REST请求的令牌用作auth参数

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

    {
    "rules": {
        ".write": false,
        ".read": "auth.uid === 'my-awesome-server'"
    }
    

    }

  6. 访问所有数据,做一些很棒的事情。

优点

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

火力基地的秘密

如果您是那种乐于助人为乐的开发人员,并且喜欢sudo打字,那么您也可以直接使用Firebase机密进行身份验证。

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

不这样做的原因

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