// 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来获取数据
,则不是来自浏览器我收到以下错误:
{
"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 详情。
因此,指南和参考的说法不同。
需要帮助
答案 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”}}
我确实理解您指出的文档需要 得到改进,并将其提升到我们的文档团队,以便它 可以适当优先考虑。虽然,我不能分享任何 截至目前的时间表。
希望这会有所帮助。如有任何问题或疑虑,请随时回复。