我有一个在 Firebase 上编写的应用程序。安全规则和客户端代码不足以使我的应用程序正常工作。我需要连接服务器来执行一些任务:
- 清理难以清理的非规范化数据断开连接时
处理程序 https://www.firebase.com/docs/web/guide/offline-capabilities.html#section-presence
- 为我的数据构建超出我能力范围的额外索引
和queries https://www.firebase.com/blog/2014-11-04-firebase-realtime-queries.html
更新(20160611):如果您在以下位置创建项目https://firebase.google.com https://firebase.google.com,从服务器访问数据库的步骤是不同的。看这个答案:是否仍然可以在 Firebase 3 中对令牌进行服务器端验证? https://stackoverflow.com/questions/37408684/is-it-still-possible-to-do-server-side-verification-of-tokens-in-firebase-3
您可以通过两种方式执行此操作:生成服务器身份验证令牌,或使用 Firebase 密钥。
生成服务器令牌您可以使用相同的令牌生成器库 https://www.firebase.com/docs/web/guide/login/custom.html为自定义登录创建,以生成可从服务器使用的令牌。然后,您可以根据安全规则提供对此服务器的特殊访问权限。
步骤如下:
- Get the 令牌生成器库 https://www.firebase.com/docs/web/guide/login/custom.html#section-rest-token-helper-libraries适用于您服务器的语言/平台。 Node.js 和 Java 服务器往往效果最好。
-
使用预先选择的 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> });
-
使用令牌来验证您的客户端。这是更多的 Node.js 代码:
var ref = new Firebase("https://<your-firebase>.firebaseio.com/");
ref.authWithCustomToken(token, function(error, authData) {
...
});
如果您的服务器语言没有客户端,例如PHP,使用 REST 请求的令牌作为auth范围 https://www.firebase.com/docs/rest/guide/retrieving-data.html#section-rest-uri-params.
-
更新您的安全规则以授予您的服务器特殊权限(由 uid 标识),例如这个允许对整个 Firebase 进行读取访问的简单规则
{
"rules": {
".write": false,
".read": "auth.uid === 'my-awesome-server'"
}
}
访问所有数据,做一些很棒的事情。
优点
- 这是 Firebase 官方推荐的对服务器进行身份验证的方法。
- 您的服务器将遵守验证规则。
- 服务器只是另一个用户。您可以使用安全规则来提供对数据的细粒度访问。
- 由于访问是细粒度的,因此服务器中的错误不太可能造成损坏,例如删除根节点。
Firebase 秘密
如果您是那种喜欢生活在边缘的开发人员,并且类型sudo http://xkcd.com/149/您还可以直接使用您的 Firebase 密钥进行身份验证。
但说真的,不要这样做。这很危险。
不这样做的理由
- 就像盲目使用一样
sudo
,这是非常危险的。
- 你的
服务器不会尊重您的验证规则。
- 您的服务器已完整阅读
/ 对 Firebase 的写入权限。如果它有一个足够丑陋的错误,它
可能会删除或损坏无业务访问的数据。
- 你的
秘密最终会出现在更多地方(可能在出站请求日志中,
ETC)。如果它泄露出去,您将面临更大的风险。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)