【问题标题】:How do I access my Firebase Database via HTTP REST API?如何通过 HTTP REST API 访问我的 Firebase 数据库?
【发布时间】: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 访问我的数据库?

【问题讨论】:

标签: firebase firebase-realtime-database firebase-authentication access-token refresh-token


【解决方案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 请求。否则将是未经授权的。但我认为我可以创建一个用户并将其令牌与应用程序一起发送(?)
猜你喜欢
  • 2020-02-21
  • 2017-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
相关资源
最近更新 更多