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

如何设置Firebase安全规则以仅接受来自iOS应用程序的连接,ios,authentication,firebase,firebase-security,Ios,Authentication,Firebase,Firebase Security,我想配置Firebase数据库,以便它只接受来自iOS应用程序的连接 我在配置规则以管理经过身份验证的用户的访问等方面没有问题,但我想知道什么是防止来自除我之外的其他应用程序的连接的最佳方法 我该怎么做 对用户案例更具体。我的应用是一项服务,用户可以注册使用它,并通过twitter和Facebook进行身份验证。用户将为该服务付费,应用程序将使用Firebase作为后端,这意味着我将为Firebase服务付费。用户付钱给我,我付钱给Firebase。因此,这就是我只希望我的应用程序是唯一一个连接

我想配置Firebase数据库,以便它只接受来自iOS应用程序的连接

我在配置规则以管理经过身份验证的用户的访问等方面没有问题,但我想知道什么是防止来自除我之外的其他应用程序的连接的最佳方法

我该怎么做


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

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

  • 您提供了一个可购买的应用程序,可以访问高级数据
  • 只有付费客户才能读取这些数据
  • 用户可以使用FirebaseSimpleLogin登录,而无需下载您的应用程序
  • 你想阻止这一切吗
  • 假设所有这些都是正确的,我看到两个快速答案:

    创建自己的身份验证令牌

    由于FirebaseSimpleLogin在云中可用,因此您将无法阻止用户基于设备进行身份验证。但是FirebaseSimpleLogin只是一个包装,所以没有什么能阻止你

    现在,只需关闭简单登录,用户将无法在未首先从您的服务获取有效令牌的情况下进行身份验证。这里的安全规则是专有的,但包含如下内容:

    ".read": "auth.uid !== null"
    
    ".read": "root.child('purchase_receipts/'+auth.uid).exists()"
    
    有了一些创意,根据需要twitter/facebook身份验证的用例,您可能能够绕过整个身份验证过程,只需在应用程序注册时请求一个令牌,而不强制用户进行身份验证

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

    当然,根据定义,简单登录很简单,不需要服务器进程。您可以通过存储有关哪些用户购买了您的应用程序的信息来利用此功能:

  • 用户从应用商店购买应用程序
  • 在接收交易期间,您将用户id和购买记录存储在Firebase中
  • 正常使用简单的登录验证
  • 添加安全规则以确保用户已购买该应用
  • 安全规则将如下所示:

    ".read": "auth.uid !== null"
    
    ".read": "root.child('purchase_receipts/'+auth.uid).exists()"
    
    补充阅读:


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

  • 您提供了一个可购买的应用程序,可以访问高级数据
  • 只有付费客户才能读取这些数据
  • 用户可以使用FirebaseSimpleLogin登录,而无需下载您的应用程序
  • 你想阻止这一切吗
  • 假设所有这些都是正确的,我看到两个快速答案:

    创建自己的身份验证令牌

    由于FirebaseSimpleLogin在云中可用,因此您将无法阻止用户基于设备进行身份验证。但是FirebaseSimpleLogin只是一个包装,所以没有什么能阻止你

    现在,只需关闭简单登录,用户将无法在未首先从您的服务获取有效令牌的情况下进行身份验证。这里的安全规则是专有的,但包含如下内容:

    ".read": "auth.uid !== null"
    
    ".read": "root.child('purchase_receipts/'+auth.uid).exists()"
    
    有了一些创意,根据需要twitter/facebook身份验证的用例,您可能能够绕过整个身份验证过程,只需在应用程序注册时请求一个令牌,而不强制用户进行身份验证

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

    当然,根据定义,简单登录很简单,不需要服务器进程。您可以通过存储有关哪些用户购买了您的应用程序的信息来利用此功能:

  • 用户从应用商店购买应用程序
  • 在接收交易期间,您将用户id和购买记录存储在Firebase中
  • 正常使用简单的登录验证
  • 添加安全规则以确保用户已购买该应用
  • 安全规则将如下所示:

    ".read": "auth.uid !== null"
    
    ".read": "root.child('purchase_receipts/'+auth.uid).exists()"
    
    补充阅读:


    您能解释一下这个用例吗?特别是,如果用户具有有效的身份验证凭据,那么他们从何处连接又有什么关系呢?这听起来有点像“如何防止云中的东西出现在云中”。理解这一点有助于缩小回答的范围。Firebase中存储的数据是经过策划的,应该由iOS应用程序使用。这些数据是iOS应用程序为其用户提供的价值的一部分,因此无法从其他任何地方访问。除了浏览器签名(当然可能是伪造的)之外,云中的服务器是否可以使用某种手段确保从应用程序接收到请求而不是从浏览器接收到请求?我可以提供Firebase部分来保护数据,但不会告诉您任何web服务如何确保连接的设备是一种或另一种类型。嗨,加藤。我不想知道设备的类型,也不想知道它是网络设备还是移动设备。我想要的是,该应用程序可以像用户一样进行身份验证。把它想象成一个社交应用。一方面,我想让用户使用twitter和Facebook等进行身份验证。。。另一方面,我只想通过我的服务(我的应用程序)使用数据。双方都使业务成为可能。让应用程序以某种方式向服务注册,以便应用程序的每个实例都收到一个唯一的标识符,这是否合理?如果是这样的话,我可以解释如何利用它。你能解释一下这个用例吗?服务提供商