【发布时间】:2017-02-16 20:46:50
【问题描述】:
我在向 Firebase 发出经过身份验证的请求时遇到了一些问题。
我生成了一个令牌,但是当我将它发送到 Firebase 时,当我在请求中发送 access_token 时,我总是得到一个 Unauthorized request. 响应。奇怪的是,它可以在没有参数的情况下工作。
我什至在没有访问规则的情况下进行了测试,但我得到了相同的结果。
当我发送 curl 'https://<PROJECTID>.firebaseio.com/events.json' 时,我得到了期望值,但如果我发送 curl 'https://<PROJECTID>.firebaseio.com/events.json?access_token=<TOKEN>' 答案是
{ "error" : "Unauthorized request." }
我已尝试将其发送到 curl -H "Authorization: Bearer <TOKEN>" https://<PROJECTID>.firebaseio.com/events.json 之类的标头中,但也不起作用。
如果我在数据库中强制执行一些规则,那么没有令牌的初始请求会给我
{ "error" : "Permission denied" } 但如果我发送令牌,我仍然会收到 { "error" : "Unauthorized request." }。
任何帮助将不胜感激。
更新
设法修复它。我没有正确获得令牌。检查this thread 后,我注意到在请求令牌时我没有在scopes 数组中发送https://www.googleapis.com/auth/userinfo.email。添加后效果很好。
更新 2
正如新萌所说,这在Firebase Authenticate REST Requests documentation 中也很清楚。
【问题讨论】:
-
我在使用 AppEngine firebase 数据库示例代码时遇到了类似的问题。查看 Pyrebase python 代码,看起来参数应该是 ?auth=
但这对我也不起作用。 -
我的问题是由对
GoogleCredentials.get_application_default().create_scoped(_FIREBASE_SCOPES)的调用引起的。我认为此调用将身份验证标头添加到 http 请求中,并且执行不正确。如果您打印 curl 默认生成的标题,您可能会在其中看到不需要的内容? -
@Calvin,
?auth=<TOKEN>如果我使用已弃用的 Firebase Secret,则可以使用。不过会检查标题。谢谢。 -
您能否将自己的答案添加为答案并将其标记为已接受的答案?或者,或者,将@daniel-stenberg 的答案标记为接受的答案?
标签: curl firebase firebase-authentication