firebase / firebase/firebase-admin-node

Setting $GOOGLE_APPLICATION_CREDENTIALS is causing authentication issue

Offen
#2,293 1 Kommentar 2 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
api: core
Vorherrschende Sprache
TypeScript
Sterne
1.7k
Forks
419
Ø Merge
3 T. 10 Std.
Gemergte PRs (30 T.)
16

Beschreibung

* Operating System version: `macOS 12.4`
* Firebase SDK version: `firebase cli 12.5.2`
* Firebase Product: `admin 11.10.1`
* Node.js version: `v18.16.0`
* NPM version: 9.5.1

#### Steps to reproduce:

When pointing $GOOGLE_APPLICATION_CREDENTIALS to a JSON key and running `firebase emulators:start --only functions`, the console will confirm the key is recognized
```
functions: Your GOOGLE_APPLICATION_CREDENTIALS environment variable points to
.json. Non-emulated services will access production using these credentials. Be careful!
```
but the `firebase-admin` module will throw error
```
FirebaseAppError: Credential implementation provided to initializeApp() via the "credential" property failed to fetch a valid Google OAuth2 access token with the following error: "Error fetching access token: Error while making request: getaddrinfo ENOTFOUND metadata.google.internal. Error code: ENOTFOUND".
...
errorInfo: {
code: 'app/invalid-credential',
message: 'Credential implementation provided to initializeApp() via the "credential" property failed to fetch a valid Google OAuth2 access token with the following error: "Error fetching access token: Error while making request: getaddrinfo ENOTFOUND metadata.google.internal. Error code: ENOTFOUND".'
},

```

When passing in the same key file directly when initializing `firebase-admin`, no such error is produced.

### Relevant Code:
initialization that **WILL** cause the error (with `$GOOGLE_APPLICATION_CREDENTIALS` set to the path to the key JSON file)
``` javascript
admin.initializeApp();

// or
admin.initializeApp({
credential: admin.credential.applicationDefault(),
});
```

initialization that will **NOT** cause the error:
```javascript
const serviceKey = require("path-to-the-key.json");

admin.initializeApp({
credential: admin.credential.cert(payload)
});

```

code snipet to trigger the error
```javascript
async function test() {
const EMAIL = ;
const user = await admin.auth().getUserByEmail(EMAIL);
}
```

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit admin.initializeApp() und admin.credential.applicationDefault(), reproduziere das Problem dann mit GOOGLE_APPLICATION_CREDENTIALS, das auf den Pfad zum Schlüssel gesetzt ist, und vergleiche mit credential.cert(payload). Die Aufgabe ist abgeschlossen, wenn die umgebungsbasierte Initialisierung ein gültiges OAuth-Token erhält und admin.auth().getUserByEmail(EMAIL) den gemeldeten metadata.google.internal-Fehler nicht mehr auslöst.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
javascript, node.js
Bereich
authentication
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.