Не удается получить доступ к базе данных FireBase через HTTP / REST ошибка 403 запрещено

Swift + Vapor framework для сервера + Xcode 8.1

Я пытаюсь прочитать базу данных Firebase в реальном времени, делая HTTP-запросы к моей БД, но я получаю разрешение отказано.

эти шаги:
1. создать JWT подписать его с секретным ключом, загруженным из "console.developers.google.com"
2. отправьте запрос POST на сервер OAuth2 и получите токен доступа
3. отправьте запрос GET в базу данных firebase с токеном доступа, полученным от сервера OAuth2.

Я получаю "отказано в разрешении", HTTP / 1.1 403 Forbidden

// 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"
}

Firebase Service Account FireBase Database Rulles

3 ответов


TLDR; попробуйте поставить auth=<TOKEN> в строке запроса вместо использования заголовка Authorization.


документация Firebase неясна о том, как это работает. Согласно документации, есть три метода, которые должны работать.

  1. auth=<TOKEN> в строке запроса (ссылке)
  2. access_token=<TOKEN> в строке запроса (ссылке)
  3. Authorization: Bearer <TOKEN> в заголовке запроса (ссылке)

Я не уверен, что все три метода действительно работать. Я использую метод 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]

Я нашел ответ!--6-->просмотр групп google здесь


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

должно быть

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