2014-04-19 54 views
0

接受连接我想配置火力地堡数据库,以便仅接受来自我的iOS应用程序的连接。如何设置火力地堡安全规则,只从iOS应用

我在配置规则以管理来自已认证用户的访问等方面没有问题......但我想知道什么是防止来自其他应用程序的连接的最佳方法。

我该怎么做?

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

+0

你能解释一下这个用例?特别是,如果用户具有有效的身份验证凭据,为什么它们连接的位置很重要?这听起来很像“我如何防止云中的东西进入云端”。理解这应该有助于缩小回答的范围。 – Kato

+0

存储在Firebase中的数据已经过策划,并且意味着将由iOS应用程序使用。这些数据是iOS应用程序向用户提供的价值的一部分,因此无法从其他地方访问。 – vicentevicens

+0

云中的服务器是否可以用来确保从应用程序和浏览器收到请求,而不是浏览器签名(当然这可能是伪造的)?我可以提供用于保护数据的Firebase部分,但不会告诉您任何Web服务如何确保连接的设备是这种或那种类型。 – Kato

回答

4

如果我理解正确的问题,标准如下:

  1. 您提供可购买的应用程序,提供优质的数据
  2. 只有付费客户应该能够读取访问数据
  3. 这是可能的用户与FirebaseSimpleLogin登录,而无需下载你的应用程序
  4. 你想避免这种情况

假设所有这一切都是正确的,我看到两个快速解答:

创建您自己的身份验证令牌

由于FirebaseSimpleLogin可从在云中,你将无法防止用户进行身份验证基于设备。但FirebaseSimpleLogin只是token generator上的包装,所以没有任何东西可以阻止你从generating your own

#!/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() { /* ??? */ } 

现在,人们可以简单地关掉简单的登录,用户将没有办法不首先从服务获得有效令牌进行身份验证。这里的安全规则是专有的,但会包含这样的事情:

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

有了一定的创造性,根据不同的使用情况下,为需要的Twitter/Facebook的身份验证,您也许能绕过整个身份验证过程中通过简单地具有应用程序在注册时请求一个令牌,永远不会强制用户进行身份验证。

使用结合一些元数据以简单的登录

当然,简单的登录是通过定义简单,并且不需要一个服务器进程。你可以通过存储有关哪些用户已购买的应用程序信息,利用这样的:收货交易的过程中从商店

    1. 用户购买应用程序,您存储用户ID和火力地堡
    2. 使用简单的登录身份验证购买记录正常
    3. 添加安全规则,以确保用户购买的应用程序

    的安全规则会是这个样子:

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

    补充阅读: