2016-11-25 38 views
10

Swift + Vapor ramy serwer + Xcode 8.1nie można uzyskać dostępu do bazy danych poprzez Firebase błędu HTTP/REST 403.

próbuję czytać Firebase Realtime Database podejmowania żądań HTTP do mojego DB, ale mam odmówiono zgody.

Są to kroki: 1. Utwórz
JWT podpisać z tajnego klucza pobranego z "console.developers.google.com"
2. wyślij żądanie POST do serwera OAuth2 i uzyskać dostęp tokena
3. send Żądaj GET do bazy danych firebase z tokenem dostępu otrzymanym z serwera OAuth2.

otrzymuję "Permission denied", 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":"[email protected]", 
"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

+0

@frank van puffelen mógłbyś rzucić swoją opinię na temat tego, dlaczego nie mogę uzyskać dostęp do mojej bazy danych Firebase? – bibscy

Odpowiedz

3

Kluczem scope brakowało wartość https://www.googleapis.com/auth/userinfo.email

let jwtClaimSet = 
    ["iss":"[email protected]", 
"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] 

Znalazłem odpowiedź browsing google groups here

+0

to działało, dziękuję –

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

powinny być

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

Wciąż dostaję błąd: Odmowa uprawnień – bibscy

+0

czy możesz spróbować rozpakować accesstoken? 'headers: [" Authorization ":" Bearer \ (accesstoken!) "], również wydrukuj nagłówki i opublikuj, jak to wygląda –

+0

Nie mogę wymusić rozwinięcia opcji' accesstoken', ponieważ nie jest to opcja opcjonalna. FirebaseResponse_is Response '- HTTP/1.1 403 Forbidden - Nagłówki: \t Connection: keep-alive \t Cache-Control: no-cache \t Server: nginx \t Data: Fri, 25 Nov 2016 17:55:00 GMT \t Content-Type: application/json; charset = utf-8 \t Długość treści: 37 \t Strict-Transport-Security: max-age = 31556926; includeSubDomains; preload \t Access-Control-Allow-Origin: * - Ciało: \t { "błąd": "Odmowa uprawnień." } ' – bibscy

4

TLDR; Spróbuj umieścić auth=<TOKEN> w ciągu kwerendy zamiast używać nagłówka autoryzacji.


Dokumentacja Firebase nie jest jasna, jak to działa. Zgodnie z dokumentacją istnieją trzy metody, które powinny działać.

  1. auth=<TOKEN> w ciągu kwerendy (link)
  2. access_token=<TOKEN> w ciągu kwerendy (link)
  3. Authorization: Bearer <TOKEN> w nagłówka żądania (link)

nie jestem przekonany, że wszystkie trzy metody rzeczywiście zrobić działa jednak. Używam metody 1 w mojej aplikacji, więc wiem, że jedna działa na pewno.

+0

Jeśli wykonuję' nagłówek: [:], zapytanie: ["auth": "ya29.E ... XXXX"]) 'Otrzymuję 400 złych żądań. Jeśli robię "nagłówki: [:], zapytanie: [" access_token ":" ya29.ElqiA "])' Otrzymuję 403 Forbidden. Jeśli wykonuję 'nagłówki: [" Autoryzacja ":" Nośnik \ (accesstoken) "], zapytanie: [:])', dostaję 403 Zakazane – bibscy

+0

Próbowałem również 'curl https://fir-30c9e.firebaseio.com/ data/Users.json? access_token = ya29.ElqiAz4TSV-FXkKpXOE636vk__pWx8y5pqZ5QYW ..... itd. "i otrzymuję komunikat" error ":" Odmowa uprawnień. " – bibscy

+0

Nie jestem tego pewien. Jeśli curl nie działa, być może twój token jest nieważny? Jeśli używasz zakodowanego na klucz hasła accesstoken, może on wygasnąć. – nloewen