我有一个在 Firebase 上编写的应用。安全规则和客户端代码不足以使我的应用程序正常工作。我需要连接服务器来完成一些任务:
- 清理难以清理的非规范化数据 onDisconnect handlers
- 为我的数据构建超出我能力范围的额外索引 和 queries
最佳答案
更新 (20160611):如果您在 https://firebase.google.com 上创建项目,从服务器访问数据库的步骤不同。看到这个答案:Is it still possible to do server side verification of tokens in Firebase 3?
您可以通过两种方式执行此操作:生成服务器身份验证 token ,或使用 Firebase key 。
生成服务器 token 您可以使用相同的 token generator libraries为自定义登录创建以生成可从服务器使用的 token 。然后,您可以根据您的安全规则提供对该服务器的特殊访问权限。
步骤如下:
- 获取 token generator library为您的服务器的语言/平台。 Node.js 和 Java 服务器往往工作得最好。
使用预选的 uid 生成 token 。如果您正在编写 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> });
使用 token 来验证您的客户端。这里有更多 node.js 代码:
var ref = new Firebase("https://<your-firebase>.firebaseio.com/"); ref.authWithCustomToken(token, function(error, authData) { ... });
如果您的服务器语言没有客户端,例如PHP,将 REST 请求的 token 用作
auth
parameter .更新您的安全规则以授予您的服务器由 uid 标识的特殊权限,例如允许对整个 Firebase 进行读取访问的简单规则
{ "rules": { ".write": false, ".read": "auth.uid === 'my-awesome-server'" } }
访问所有数据,做一些很棒的事情。
优势
- 这是 Firebase 官方推荐的对您的服务器进行身份验证的方法。
- 您的服务器将遵守验证规则。
- 服务器只是另一个用户。您可以使用安全规则来提供对数据的细粒度访问。
- 由于访问是细粒度的,因此您的服务器中的错误不太可能造成损坏,例如删除您的根 Node 。
Firebase secret
如果您是那种喜欢生活在边缘的开发人员,请输入 sudo
您还可以直接使用您的 Firebase key 进行身份验证。
但是说真的,不要这样做。很危险。
不这样做的理由
- 就像盲目地使用
sudo
一样,非常危险。 - 你的 服务器将不遵守您的验证规则。
- 您的服务器已完整读取 /对您的 Firebase 的写入权限。如果它有一个足够丑陋的错误,它 可能会删除或损坏没有业务访问权限的数据。
- 你的 secret 最终出现在更多地方(可能在出站请求日志中, ETC)。如果它泄露出去,您将面临更大的风险。
关于node.js - 如何向 Firebase 验证服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29240940/