如何向Firebase验证服务器?

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

  • 清理使用
    断开连接
    处理者
  • 构建超出我能力范围的额外数据索引
    具有
    询问

answer=“29240941”的数据

更新(20160611):如果您在https://firebase.google.com,从服务器访问数据库的步骤不同。请参阅此答案:是否仍可以在Firebase 3中对令牌进行服务器端验证?

有两种方法可以做到这一点:生成服务器身份验证令牌,或使用Firebase机密

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

以下是步骤:

  1. 获取服务器语言/平台的令牌生成器库。Node.js和Java服务器往往工作得最好
  2. 使用预先选择的uid生成令牌。如果您正在编写node.js服务器,代码可能如下所示:

    var FirebaseTokenGenerator=require(“firebase令牌生成器”);
    var tokenGenerator=new firebaseTokenerator(“<您的firebase secret>”);
    var token=tokenGenerator.createToken(
    {uid:“我最棒的服务器”},
    {expires:<远至未来秒>});

  3. 使用令牌对客户端进行身份验证。下面是更多node.js代码:

    var ref=new Firebase(“https://<your Firebase>.firebaseio.com/”;
    ref.authWithCustomToken(令牌,函数(错误,authData){
    ...
    });
    
  4. 如果服务器的语言(如PHP)没有客户端,请将REST请求的令牌用作auth参数

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

    {
    “规则”:{
    “.write”:false,
    “.read”:“auth.uid==‘我的超级服务器’”
    }
    }
    
  6. 访问所有数据,做一些很棒的事情

优势

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

火基机密

如果您是那种喜欢生活在边缘的开发人员,并且可以轻而易举地键入sudo,那么您也可以直接使用Firebase机密进行身份验证

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

不这样做的原因

  • 就像盲目使用sudo一样,这是非常危险的
  • 你的
    服务器将不遵守您的验证规则

  • 您的服务器已完全读取
    /对Firebase的写访问权限。如果它有一个足够丑陋的bug,它就会
    可能会删除或损坏没有业务访问权限的数据

  • 你的
    秘密最终会出现在更多的地方(可能出现在出站请求日志中,
    等等)。如果它泄露出去,你将面临更大的风险

发表评论