Firebase HTTP POST auth参数

时间:2017-01-24 11:12:21

标签: rest firebase firebase-realtime-database firebase-authentication jwt

我想使用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。使用此令牌邮递员我仍然被拒绝许可。

1 个答案:

答案 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