如何通过 HTTP REST API 访问我的 Firebase 数据库?
Posted
技术标签:
【中文标题】如何通过 HTTP REST API 访问我的 Firebase 数据库?【英文标题】:How do I access my Firebase Database via HTTP REST API? 【发布时间】:2017-03-24 01:45:57 【问题描述】:感谢this answer,我能够通过 HTTP REST API 和电子邮件/密码连接到 Firebase 3。使用此 API 登录会返回用于访问 Firebase 数据库的访问令牌。此访问令牌将在 1 小时后过期。登录后还会返回一个刷新令牌,我可以用它来刷新我的访问令牌。这是我具体在做什么:
方法:
POST
网址:
https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=<my-firebase-api-key>
有效载荷:
email: "<email>",
password: "<password>",
returnSecureToken: true
回复:
"kind": "identitytoolkit#VerifyPasswordResponse",
"localId": "<firebase-user-id>", // Use this to uniquely identify users
"email": "<email>",
"displayName": "",
"idToken": "<provider-id-token>", // Use this as the auth token in database requests
"registered": true,
"refreshToken": "<refresh-token>",
"expiresIn": "3600"
在刷新我的访问令牌的情况下:
网址:
https://securetoken.googleapis.com/v1/token?key=<my-firebase-api-key>
有效载荷:
grant_type: "refresh_token",
refresh_token: "<refresh-token>"
回复:
"access_token": "<access-token>",
"expires_in": "3600",
"token_type": "Bearer",
"refresh_token": "<refresh-token>",
"id_token": "<id-token>",
"user_id": "<user-id>",
"project_id": "<project-id>"
如果我有访问令牌,如何通过 HTTP REST API 访问我的数据库?
【问题讨论】:
查看https://firebase.google.com/docs/reference/rest/database#section-param-auth他们在文档中提到的内容。 【参考方案1】:所以在与技术支持沟通后,这是我的回答:
在您的数据库规则中,包含与您正在执行的操作兼容的类似内容:
"rules":
"users":
"$user_id":
// grants write access to the owner of this user account
// whose uid must exactly match the key ($user_id)
".write": "$user_id === auth.uid",
".read": "$user_id === auth.uid"
然后在您的数据库中创建一个users
表,并在其中创建一个名称为您正在使用的身份验证电子邮件/密码帐户的<user-id>
的表。该表中包含您可以通过access-key
访问的信息。
然后像这样发送请求:
https://samplechat.firebaseio-demo.com/users/<user-id>.json?auth=<access-key>
其中 access-key
是在来自 Google 的 JSON 响应中可以称为 idToken
、id_Token
或 access_key
的键。
【讨论】:
这是我得到的最佳答案。 Firebase 文档如此凌乱和令人困惑!他们甚至不在 REST 文档中的任何地方谈论 idToken。真可惜。非常感谢。 您好,我正在尝试让一些 json 文件公开可用,而另一些则不允许。我正在这样做"rules": "publicjson": ".read": true, ".write": false, ".read": "auth != null", ".write": false
。我访问publicjson
没有问题。但是,我无法访问属于 ".read": "auth != null"
规则的任何其他 json。我正在尝试让邮递员使用Authorization: Bearer xxx
发出GET
请求,但没有运气。你知道吗?这个想法只是将访问密钥存储在应用程序中并在请求中使用。不需要用户表。谢谢
@Richeek 你知道我上面问的什么吗? ^^^ 谢谢
@EdisonSpencer 如果您只想拥有一种管理员用户,那么您需要做的是 1. 从 Firebase 控制台创建一个管理员用户(使用一些电子邮件和密码组合) 2. 注意它UID 并将您的读取权限更改为 auth.uid=='' 3. 从您的客户端使用电子邮件和密码凭据登录到 Firebase。请注意,如果您使用 REST 登录,那么您的登录 URL 的格式为 (googleapis.com/identitytoolkit/v3/relyingparty/…)。最好创建一个单独的问题,以便其他人也可以利用!
@Richeek 感谢有关创建用户以获取其令牌的提示。我不想创建任何类型的用户。我只是想在 Firebase 上托管一些信息并公开提供,只要你有一个令牌以便向这些 JSON 发出 GET 请求。否则将是未经授权的。但我认为我可以创建一个用户并将其令牌与应用程序一起发送(?)以上是关于如何通过 HTTP REST API 访问我的 Firebase 数据库?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 GitHub REST API 通过我的个人访问令牌访问组织拥有的私有存储库中的文件数据?
如何通过 Python 中的 REST API 访问共享点站点?