如何将服务器authentication到Firebase?
我有一个在Firebase上编写的应用程序。 安全规则和客户端代码不足以使我的应用程序工作。 我需要连接一个服务器来完成一些任务:
- 清理使用onDisconnect处理程序进行清理的非规范化数据
- build立额外的数据索引,超越了我能用查询做的事情
已更新(20160611):如果您在https://firebase.google.com上创build了项目,则从服务器访问数据库的步骤有所不同。; 看到这个答案: 是否仍然可以在Firebase 3中进行令牌的服务器端validation?
有两种方法可以执行此操作:生成服务器身份validation令牌或使用Firebase秘密。
生成服务器令牌您可以使用为“自定义login”创build的相同令牌生成器库生成可从服务器使用的令牌。 然后,您可以从安全规则中提供对此服务器的特殊访问权限。
这里是步骤:
- 获取服务器语言/平台的令牌生成器库 。 Node.js和Java服务器往往效果最好。
-
使用预先select的uid生成一个标记。 如果您正在编写node.js服务器,则代码可能如下所示:
var FirebaseTokenGenerator = require("firebase-token-generator"); var tokenGenerator = new FirebaseTokenGenerator("<your-firebase-secret>"); var token = tokenGenerator.createToken( {uid: "my-awesome-server"}, { expires: <far_into_the_future_seconds> });
-
使用令牌来validation您的客户端。 这里有更多的node.js代码:
var ref = new Firebase("https://<your-firebase>.firebaseio.com/"); ref.authWithCustomToken(token, function(error, authData) { ... });
-
如果服务器的语言没有客户端,例如PHP,请将REST请求的标记用作
auth
参数 。 -
更新您的安全规则,授予您的服务器的特殊权限,如uid所标识的,就像这个允许读取整个Firebase的简单规则
{ "rules": { ".write": false, ".read": "auth.uid === 'my-awesome-server'" } }
-
访问所有的数据,做很棒的东西。
优点
- 这是Firebase官方推荐的方式来validation您的服务器。
- 您的服务器将遵守validation规则。
- 服务器只是另一个用户。 您可以使用安全规则来精确访问您的数据。
- 由于访问是细粒度的,因此服务器中的错误不太可能造成损害,例如删除根节点。
Firebase的秘密
如果您是喜欢生活在边缘的开发人员,并且只需戴上帽子即可使用sudo
,还可以直接使用Firebase秘密进行身份validation。
但严重的是,不要这样做。 这很危险。
理由不这样做
- 就像盲目使用
sudo
,这是非常危险的。 - 您的服务器将不会尊重您的validation规则。
- 您的服务器完全读/写您的Firebase的访问权限。 如果它有一个丑陋的错误,它可能会删除或损坏没有业务访问的数据。
- 你的秘密在更多的地方(可能在出站请求日志等)结束。 如果它冒了出来,你会面临更大的风险。