[英]FireBase Rest with auth query param not working
// 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=JAVA代码中的代币生成器
我收到以下错误:
{
"error" : "Missing claim 'kid' in auth header."
}
我究竟做错了什么?
自定义令牌是否不适用于rest api。 我是否需要使用firebase链接 ,如果是,如何在其中添加其他声明?
PS:我正在使用的Firebase SDK版本
com.google.firebase firebase-server-sdk 3.0.1
编辑:FIREBASE文档中存在不一致
FIREBASE 指南文档说明
参数可以是您的Firebase应用程序的机密,也可以是身份验证令牌,如“ Firebase项目中的用户”中所述
描述的身份验证类型为https://firebase.google.com/docs/auth/users#auth_tokens
注意:那里存在自定义令牌
FIREBASE 参考文档说明
该参数可以是Firebase应用程序的机密,也可以是身份验证令牌。 有关详细信息,请参见REST身份验证文档 。
因此,指南和参考的讨论方式有所不同。
请帮忙
来自Firebase支持团队
是的,使用FirebaseAuth.getInstance()。createCustomToken(uid,extraClaims)创建自定义令牌不适用于REST API。 这些令牌旨在由具有signInWithCustomToken(token)的客户端SDK使用。 请注意,由于新Firebase(旧版Firebase支持)中安全模型的更改,目前不支持“客户端到数据库” REST请求。
如您所指出的,您需要单击此链接才能发出经过身份验证的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图灵“}}
我确实知道您所指出的文档有待改进,并将其提交给我们的文档团队,以便可以对其进行优先排序。 不过,目前我无法分享任何时间表。
希望这可以帮助。 如有其他问题或疑虑,请随时回应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.