【发布时间】:2017-06-09 04:00:38
【问题描述】:
我想直接从 postman 或 curl 使用 Https Rest API 管理我的 Firebase 数据库。例如使用 postman 和 https://MY_FIREBASE_DATABSE_URL/users.json 来返回用户 json。如果我为公共访问设置安全规则
{
"rules": {
".read": true,
".write": true
}
它工作正常。
但是如果我设置需要授权的安全规则
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
我明白了
{"错误", "permission_denied" }
据我了解,我需要使用 auth=SECURITY_TOKEN 附加 https 请求。使用 firebase 控制台中的密钥 - > SECURITY_TOKEN 的服务帐户不起作用,但无论如何它说数据库机密已被弃用。
所以我下载了此处引用的 Java 令牌生成器 https://www.firebase.com/docs/rest/guide/user-auth.html#section-rest-server-authentication。
我使用以下代码生成我的令牌
public void actionPerformed(ActionEvent e) {
String uid = uidField.getText();
boolean admin = adminField.isSelected();
Map<String, Object> authPayload = new HashMap<String, Object>();
authPayload.put("uid", uid);
authPayload.put("some", "arbitrary");
authPayload.put("data", "here");
TokenOptions tokenOptions = new TokenOptions();
tokenOptions.setAdmin(admin);
TokenGenerator tokenGenerator = new TokenGenerator(<MY_DATABASE_SECRET>);
String token = tokenGenerator.createToken(authPayload, tokenOptions);
System.out.println(token);
tokenField.setText(token);
}
如上所述here
其中 MY_DATABASE_SECRET 是来自上述 Firebase 控制台的密钥,而 uid 是来自我的 Firebase 用户的用户 ID。使用这个令牌给邮递员我仍然被拒绝。
【问题讨论】:
-
您参考的文档适用于旧版 Firebase。您的项目可能是在新的 Firebase 控制台上创建的。您不能混合和匹配版本。有关如何使用新版本的 Firebase 对 REST 调用进行身份验证,请参阅此答案:由 Firebaser Michael Bleigh 撰写的stackoverflow.com/a/37444914/209103。
-
我在那篇文章中不明白(我不能在那里发表评论)是什么意思是“你需要直接使用服务帐户来创建管理访问”以及如果我需要 node.js对于它,或者我可以使用 Java 以及如何做到这一点。
标签: rest firebase firebase-realtime-database firebase-authentication jwt