如何通过 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 表,并在其中创建一个名称为您正在使用的身份验证电子邮件/密码帐户的&lt;user-id&gt; 的表。该表中包含您可以通过access-key 访问的信息。

然后像这样发送请求:

https://samplechat.firebaseio-demo.com/users/<user-id>.json?auth=<access-key>

其中 access-key 是在来自 Google 的 JSON 响应中可以称为 idTokenid_Tokenaccess_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 访问共享点站点?

如何从远程机器访问 REST API?

如何通过查询身份验证保护 REST API

如何从我的 android 设备访问我的本地 REST api?

如何使用CORS保护REST API?