具有身份验证查询参数的FireBase Rest无法正常工作

时间:2016-08-24 07:41:05

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

   // INIT FIREBASE
    FirebaseOptions options = new FirebaseOptions.Builder()
          .setServiceAccount(new FileInputStream("C:\\path\\testcustom-dff2147d3b14.json"))
          .setDatabaseUrl("https://testcustom-a1a4d.firebaseio.com/")
          .build();
        FirebaseApp.initializeApp(options);
        isFireBaseInit = true;

       // GENERATE TOKEN
        String uid = "USER ID SOME RANDOM";
        HashMap<String, Object> additionalClaims = new HashMap<String, Object>();
        String token = FirebaseAuth.getInstance().createCustomToken(uid, additionalClaims);

如果我尝试使用rest api来获取数据

,则不是来自浏览器

https://testcustom-a1a4d.firebaseio.com/1719126/1719130/1719121.json?auth=TOKEN GENERATOR IN JAVA CODE

我收到以下错误:

{
  "error" : "Missing claim 'kid' in auth header."
}

我做错了什么?

自定义令牌不适用于rest api。 我是否需要使用firebase link,如果是,如何在其中添加其他声明?

PS: 我正在使用的firebase sdk版本

    com.google.firebase     火力服务器-SDK     3.0.1

编辑:火葬文件中存在不一致

FIREBASE GUIDE文件说明

  

参数可以是您的Firebase应用程序的秘密,也可以是   身份验证令牌,如“Firebase项目中的用户”

中所述

所述的身份验证类型为https://firebase.google.com/docs/auth/users#auth_tokens
注意:自定义令牌存在

FIREBASE REFERENCE文件说明

  

参数可以是您的Firebase应用程序的秘密,也可以是   认证令牌。查看REST authentication documentation   详情。

因此,指南和参考的说法不同。

需要帮助

1 个答案:

答案 0 :(得分:2)

来自firebase支持团队

  

是的,使用创建自定义令牌   FirebaseAuth.getInstance()。createCustomToken(uid,additionalClaims)   不适用于REST API。这些令牌旨在供使用   带有signInWithCustomToken(令牌)的客户端SDK。请注意   由于存在“客户端到数据库”,因此不支持REST请求   新Firebase中的安全模型更改(旧版Firebase)   支持它。)

     

正如您所指出的,您需要按照此链接进行操作   经过身份验证的REST请求。你应该使用access_token   参数,传递从服务帐户私有派生的令牌   键。这假设您的情况是“服务器到数据库”,因为您正在使用   服务帐户。

     

要使用REST添加自定义声明,您应该使用   auth_variable_override参数。看这里。你的要求现在应该   添加声明后看起来像这样:   { “UID”: “6LiF16Dm0hNB9XO61UR1KM5Jeun2”}

     

$ curl   “https://test-de98f.firebaseio.com/test.json?access_token=&安培; auth_variable_override =%7B%22uid%22%3A%226LiF16Dm0hNB9XO61UR1KM5Jeun2%22%7D”   {“1213314”:{“alanisawesome”:“Alan Turing”}}

     

我确实理解您指出的文档需要   得到改进,并将其提升到我们的文档团队,以便它   可以适当优先考虑。虽然,我不能分享任何   截至目前的时间表。

     

希望这会有所帮助。如有任何问题或疑虑,请随时回复。