如何设置Firebase安全规则以仅接受来自iOS应用的连接

我想configuration一个Firebase数据库,以便它只接受来自我的iOS应用程序的连接。

我在configuration规则来pipe理来自authentication用户的访问等方面没有问题,但是我想知道什么是防止来自其他应用程序的连接的最佳方法。

我怎样才能做到这一点?

要更具体到用户案例。 我的应用程序是一个服务,用户可以注册使用它与Twitter和Facebookauthentication。 用户将为该服务付费,该应用将使用Firebase作为后端,这意味着我将为Firebase服务付费。 用户支付我,我支付Firebase。 所以这就是我只希望我的App是唯一连接和使用Firebase数据库的原因。 我认为这是常见的情况。 作为Parse的其他后端服务,允许您在应用程序连接时使用密钥来执行此操作。

如果我正确地理解了这个问题,标准如下:

  1. 您提供了一个可购买的应用程序,可以访问保费数据
  2. 只有付费客户才能阅读这些数据
  3. 用户可以使用FirebaseSimpleLoginlogin而无需下载应用程序
  4. 你想阻止这个

假设所有这些都是正确的,我会看到两个简单的答案:

创build您自己的身份validation令牌

由于FirebaseSimpleLogin在云中可用,因此您将无法阻止用户基于设备进行身份validation。 但FirebaseSimpleLogin只是令牌生成器的一个包装,所以没有什么能阻止你生成自己的 。

#!/usr/bin/env node var FirebaseTokenGenerator = require("firebase-token-generator"); var tokenGenerator = new FirebaseTokenGenerator(YOUR_FIREBASE_SECRET); if( validateUserIsFromiOSApp() ) { var token = tokenGenerator.createToken({id: userId}); } function validateUserIsFromiOSApp() { /* ??? */ } 

现在可以简单地closures简单的login,并且用户无需先从您的服务获取有效的令牌就无法进行身份validation。 这里的安全规则是专有的,但是会包含这样的内容:

 ".read": "auth.uid !== null" 

有了一定的创造力,根据需要twitter / facebook auth的用例,您可以通过简单地让应用程序在注册时请求令牌而避免强制用户进行authentication,从而绕过整个authentication过程。

使用一些元数据结合简单的login

当然,简单的login按定义是简单的,并不需要服务器进程。 您可以通过存储有关哪些用户已经购买了您的应用

  1. 用户从商店购买应用程序
  2. 在收到交易时,您将用户标识和购买logging存储在Firebase中
  3. 使用简单的login身份validation正常
  4. 添加安全规则以确保用户已经购买了该应用程序

安全规则看起来像这样:

 ".read": "root.child('purchase_receipts/'+auth.uid).exists()" 

补充阅读:

  • 安全规则
  • 简单的login
  • 自定义授权令牌