2

En suivant les instructions du google docs pour utiliser firebase pour auth dans GAE, j'envoie un jeton d'autorisation d'Android à mon serveur python backend. Lecture de ce jeton à l'aide du code ci-dessous:Vérification de l'autorisation de jeton d'authentification firebase refusée

import google.auth.transport.requests 
import google.oauth2.id_token 

HTTP_REQUEST = google.auth.transport.requests.Request() 
id_token = headers['authorization'].split(' ').pop() 
user_info = google.oauth2.id_token.verify_firebase_token(
    id_token, HTTP_REQUEST) 

résultats dans la trace de pile suivant:

File "/Users/alex/projects/don/don_server/mobile/main.py", line 61, in get_video 
    user_id = get_user_id(self.request_state.headers) 
    File "/Users/alex/projects/don/don_server/mobile/main.py", line 37, in get_user_id 
    id_token, HTTP_REQUEST) 
    File "/Users/alex/projects/don/don_server/mobile/lib/google/oauth2/id_token.py", line 115, in verify_firebase_token 
    id_token, request, audience=audience, certs_url=_GOOGLE_APIS_CERTS_URL) 
    File "/Users/alex/projects/don/don_server/mobile/lib/google/oauth2/id_token.py", line 76, in verify_token 
    certs = _fetch_certs(request, certs_url) 
    File "/Users/alex/projects/don/don_server/mobile/lib/google/oauth2/id_token.py", line 50, in _fetch_certs 
    response = request(certs_url, method='GET') 
    File "/Users/alex/projects/don/don_server/mobile/lib/google/auth/transport/requests.py", line 111, in __call__ 
    raise exceptions.TransportError(exc) 
TransportError: ('Connection aborted.', error(13, 'Permission denied')) 

J'ai revérifié mes Firebase paramètres du projet et localhost est répertorié comme un domaine autorisé dans le signe d'authentification -in section (je cours ceci sur le serveur de développement local de GAE). Pour autant que je me souvienne, cela marchait il y a quelques semaines. Des idées?

MISE À JOUR:

j'ai mis la même authentification en utilisant un compte de service tel que recommandé dans le firebase docs mais reçois le même message d'erreur:

from firebase_admin import auth, credentials 
import firebase_admin 

fpath = os.path.join(os.path.dirname(__file__), 'shared', 'firebase-admin-private-key.json') 
cred = credentials.Certificate(fpath) 
firebase_admin.initialize_app(cred) 

Ensuite pour traiter un jeton entrant

id_token = headers['authorization'].split(' ').pop() 
user_info = auth.verify_id_token(id_token) 

Répondre

1

À un certain moment, j'ai mis à jour ma bibliothèque requests. Parce que requestsdoesn't play well avec GAE, les appels au serveur Firebase ont échoué. En rétrogradant vers la version 2.3.0 cela fonctionne maintenant.

pip install -t lib requests==2.3.0 

Alternativement monkeypatching requests comme suggéré dans this answer fonctionne aussi bien!

import requests_toolbelt.adapters.appengine 

requests_toolbelt.adapters.appengine.monkeypatch()