我想使用Https Rest API直接从postman或curl管理我的Firebase数据库。例如,使用postman和https://MY_FIREBASE_DATABSE_URL/users.json返回用户json。如果我为公共访问设置安全规则
{
"rules": {
".read": true,
".write": true
}
它工作正常。
但是如果我设置需要授权的安全规则
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
我得到了
{“error”,“permission_denied”}
据我了解,我需要使用auth = SECURITY_TOKEN附加https请求。使用来自firebase控制台的密钥 - > SECURITY_TOKEN的服务帐户不起作用,但无论如何它表示不推荐使用数据库机密。
所以我为这里引用的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。使用此令牌邮递员我仍然被拒绝许可。
答案 0 :(得分:0)
最后,在仔细阅读了firebase文档后,我发现了它。我需要用作REST API的安全令牌是一个firebase安全令牌ID,我可以使用以下代码登录到另一个应用程序(ios,android,web)之后获取firebase,其中包含以下代码
FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getToken(true)
.addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
public void onComplete(@NonNull Task<GetTokenResult> task) {
if (task.isSuccessful()) {
String idToken = task.getResult().getToken();
// Send token to your backend via HTTPS
// ...
} else {
// Handle error -> task.getException();
}
}
});
这是我需要设置为查询字符串的auth参数的标记。
如需完整参考,请查看here