如果我理解正确的问题,标准如下:
- 您提供可购买的应用程序,提供优质的数据
- 只有付费客户应该能够读取访问数据
- 这是可能的用户与FirebaseSimpleLogin登录,而无需下载你的应用程序
- 你想避免这种情况
假设所有这一切都是正确的,我看到两个快速解答:
创建您自己的身份验证令牌
由于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的身份验证,您也许能绕过整个身份验证过程中通过简单地具有应用程序在注册时请求一个令牌,永远不会强制用户进行身份验证。
使用结合一些元数据以简单的登录
当然,简单的登录是通过定义简单,并且不需要一个服务器进程。你可以通过存储有关哪些用户已购买的应用程序信息,利用这样的:收货交易的过程中从商店
- 用户购买应用程序,您存储用户ID和火力地堡
- 使用简单的登录身份验证购买记录正常
- 添加安全规则,以确保用户购买的应用程序
的安全规则会是这个样子:
".read": "root.child('purchase_receipts/'+auth.uid).exists()"
补充阅读:
你能解释一下这个用例?特别是,如果用户具有有效的身份验证凭据,为什么它们连接的位置很重要?这听起来很像“我如何防止云中的东西进入云端”。理解这应该有助于缩小回答的范围。 – Kato
存储在Firebase中的数据已经过策划,并且意味着将由iOS应用程序使用。这些数据是iOS应用程序向用户提供的价值的一部分,因此无法从其他地方访问。 – vicentevicens
云中的服务器是否可以用来确保从应用程序和浏览器收到请求,而不是浏览器签名(当然这可能是伪造的)?我可以提供用于保护数据的Firebase部分,但不会告诉您任何Web服务如何确保连接的设备是这种或那种类型。 – Kato