2016-07-12 13 views
7

Próbuję zweryfikować backend idToken. Użytkownik został pomyślnie zalogowany do Firebase stronie klienta, ale gdy próbuję zweryfikować idToken na moim backend otrzymuję ten nie bardzo pomocny komunikat o błędzie wydajeToken Firebase Auth ID ma niepoprawne żądanie "aud"

wiadomość

Firebase Auth ID token has incorrect "aud" claim

Błąd aby stały się trochę bardziej pouczające, i czyraki aż do braku nazwy projektu w kluczu autoryzacji:

Error: Firebase ID token has incorrect "aud" (audience) claim. Expected "stripmall-0000" but got "617699194096-0aafcvsml0gke61d6077kkark051f3e1.apps.googleusercontent.com". Make sure the ID token comes from the same Firebase project as the service account used to authenticate this SDK. See https://firebase.google.com/docs/auth/server/verify-id-tokens for details on how to retrieve an ID token.

Ktoś, kto ma najmniejszy pomysł, co może być nie tak? Otrzymuję tokenId poprawnie od klienta, więc nie powinno to stanowić problemu. Szczere apologie, jeśli wcześniej o to pytano lub w jakikolwiek inny sposób byłyby trywialne.

firebase.initializeApp({ 
     serviceAccount: { 
      "type": "service_account", 
      "project_id": <project id here>, 
      "private_key_id": <key id goes here>, 
      "private_key": <key goes here> 
      "client_email": <email goes here>, 
      "client_id": <my client id>, 
      "auth_uri": "https://accounts.google.com/o/oauth2/auth", 
      "token_uri": "https://accounts.google.com/o/oauth2/token", 
      "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", 
      "client_x509_cert_url": <url goes here> 
     }, 
     databaseURL: <my db url here> 
    }); 

    router.post("/verify", function (req, res) { 
     firebase.auth().verifyIdToken(req.body.idToken).then(function (decodedToken) { 
      var uid = decodedToken.sub; 
      res.send(uid); 
     }).catch(function (error, param2) { 
      console.log(error); // 'Firebase Auth ID token has incorrect "aud" claim' 
     }); 

    }); 
+1

Z tego, co rozumiem jako "aud" odnosi się do "odbiorców" iw tym przypadku odnosi się do identyfikatora projektu. Czy na pewno masz tam poprawny project_id? –

+0

Cóż, zostały one przekazane bezpośrednio z pliku json, który pobieramy, więc nie mogę sobie wyobrazić, że coś byłoby z tym nie tak ... – Faustus

+0

Widzę to również konsekwentnie źle. Dostaje kolejną wiadomość, jaki powinien być mój klucz odbiorców. –

Odpowiedz

8

Twój problem może być to, że starają się używać tokenu JWT zwrócony przez jedną z funkcji, takich jak firebaseRef.auth().signInWithPopup()auth(). Zwracają one token JWT, jednak twierdzenia auth będą prawdopodobnie błędne i nie przejdą weryfikacji przez verifyIdToken. Zostało to potwierdzone przez obsługę techniczną firebase.

Należy użyć funkcji firebaseRef.auth().currentUser.getToken(). Ten token przejdzie weryfikację.

+1

działa dla mnie, to powinno być akceptowane jako poprawna odpowiedź –

0

Jeśli działasz lokalnie, ten komunikat o błędzie pojawia się również, jeśli masz niepoprawną zmienną środowiskową GOOGLE_APPLICATION_CREDENTIALS. Sprawdź, czy klucz JSON ustawiony za pomocą tej zmiennej środowiskowej jest zgodny z kodem projektu.