无法通过 HTTP/REST 错误 403 禁止访问 FireBase 数据库

Can't access FireBase Database via HTTP/REST error 403 Forbidden

Swift + 服务器的 Vapor 框架 + Xcode 8.1

我正在尝试读取 Firebase 实时数据库向我的数据库发出 HTTP 请求,但我的权限被拒绝。

这些是步骤:
1. 使用从 "console.developers.google.com"
下载的密钥创建 JWT 签名 2.向OAuth2服务器发送POST请求并获取访问令牌
3. 使用从 OAuth2 服务器接收到的访问令牌向 firebase 数据库发送 GET 请求。

我得到 "Permission denied", HTTP/1.1 403 禁止

// the header of the JSON Web Token (first part of the JWT)
let headerJWT = ["alg":"RS256","typ":"JWT"]

// the claim set of the JSON Web Token
let jwtClaimSet =
  ["iss":"firebase-adminsdk-kxx5h@fir-30c9e.iam.gserviceaccount.com",
 "scope":"https://www.googleapis.com/auth/firebase.database", //is this the correct API to access firebase database?
 "aud":"https://www.googleapis.com/oauth2/v4/token",
 "exp": expDate,
 "iat": iatDate]


drop.get("access") { request in
var accesstoken = "ya29.ElqhA-....XXXX"

 let responseFirebase = try drop.client.get("https://fir- 30c9e.firebaseio.com/data/Users.json",
  headers: ["Authorization":"Bearer \(accesstoken)"], 
     query: [:])

print("FirebaseResponse_is \(responseFirebase)")
return "success"
}

headers: ["Authorization":"Authorization: Bearer \(accesstoken)"],

应该是

headers: ["Authorization":"Bearer \(accesstoken)"],

TLDR; 尝试将 auth=<TOKEN> 放在查询字符串中,而不是使用授权 header.


Firebase 文档不清楚其工作原理。根据文档,应该可以使用三种方法。

  1. auth=<TOKEN> 在查询字符串中 (link)
  2. access_token=<TOKEN> 在查询字符串中 (link)
  3. Authorization: Bearer <TOKEN> 请求 header (link)

不过,我不相信这三种方法都有效。我在我的应用程序中使用的是方法 1,所以我知道它肯定有效。

scope 键缺少值 https://www.googleapis.com/auth/userinfo.email

 let jwtClaimSet =
   ["iss":"firebase-adminsdk-kxx5h@fir-30c9e.iam.gserviceaccount.com",
 "scope": "https://www.googleapis.com/auth/firebase.database  
 https://www.googleapis.com/auth/userinfo.email", 
 "aud":"https://www.googleapis.com/oauth2/v4/token",
 "exp": expDate,
 "iat": iatDate]

我找到了答案browsing google groups here