google-auth-library: JWT with a JSON keyFile signs without iss since 10.6.1 (invalid_grant: account not found)
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 85/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- nodejs, typescript
- Ambito
- authentication
Direzione di ricerca
Inizia in src/gtoken da TokenHandler.processCredentials() e buildPayloadForJwsSign(), quindi leggi i casi di keyFile in test/test.jwt.ts. Riproduci il claim iss mancante con una keyFile che omette email, aggiungi la copertura di regressione per il valore client_email ed esegui i test JWT per confermare che il claim sia stato ripristinato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Library Name
google-auth-library
Versions
Broken: 10.6.1 through 11.1.0 (latest). Works: 10.5.0 and earlier.
Node.js 22 and 24, Linux.
Description
A JWT client built from a JSON keyFile, with no email option, signs its token request with no iss claim. Google's token endpoint rejects it:
invalid_grant: Invalid grant: account not found
The same key works when email and key are passed explicitly, and it worked with the same keyFile code up to 10.5.0.
Reproduction
The transporter is stubbed and the key is a throwaway, so nothing is sent to Google:
// key.json: {"type":"service_account","client_email":"[email protected]","private_key":"<any RSA PEM>"}
const {JWT} = require('google-auth-library');
const client = new JWT({
keyFile: './key.json',
scopes: ['https://www.googleapis.com/auth/drive.readonly'],
});
client.transporter = {
request: async opts => {
const assertion = new URLSearchParams(opts.data).get('assertion');
const claims = JSON.parse(Buffer.from(assertion.split('.')[1], 'base64url'));
console.log(require('google-auth-library/package.json').version, 'iss =', claims.iss);
return {data: {access_token: 't', expires_in: 3600}};
},
};
client.getAccessToken();
10.5.0 iss = [email protected]
10.6.1 iss = undefined
11.1.0 iss = undefined
Cause
When gtoken was brought into this package (src/gtoken), the keyFile handling changed:
GoogleToken's constructor setsissfromemail. With only akeyFile,emailis still empty at that point.TokenHandler.processCredentials()reads the key file later and setstokenOptions.keyandtokenOptions.email, but nottokenOptions.iss.buildPayloadForJwsSign()signstokenOptions.iss, so the claim isundefined.
The standalone gtoken package did this.iss = creds.clientEmail || this.iss after reading the key file.
The existing tests don't catch it because every keyFile test in test/test.jwt.ts also passes email.
Expected behavior
The client_email from a JSON key file is used as iss, as before 10.6.1.
Workaround
Read the key file yourself and pass new JWT({email: key.client_email, key: key.private_key, scopes}).
I'll open a PR with a fix and tests.
- Lingua principale
- TypeScript
- Stelle
- 3.2k
- Fork
- 721
- Merge medio
- 3g 7h
- PR unite (30g)
- 149
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di googleapis/google-cloud-node
-
api: spanner
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
googleapis/google-cloud-node#9513 ·
I maintainer di solito rispondono entro 1 giorno
-
priority: p1 samples type: bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
googleapis/google-cloud-node#9367 ·
I maintainer di solito rispondono entro 1 giorno
-
bug(gapic-node-processing): setOnlyDefaultSystemTests incorrectly matches substring on absolute pathForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
googleapis/google-cloud-node#9342 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
TransferManager uploadFileInChunks does not error when abortedForse già presa @Om-singhaI l’ha presa 45 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
googleapis/google-cloud-node#9193 ·
I maintainer di solito rispondono entro 1 giorno
-
google-auth-library: getErrorFromOAuthErrorResponse() copies stack as non-writable, breaking error decoration in consumersForse già presa @Om-singhaI l’ha presa 45 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
googleapis/google-cloud-node#9155 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di googleapis/google-cloud-node
Issue simili
-
feat(subscription): add Manage Subscription (Stripe portal) to the Subscription tab plan cardAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
I maintainer di solito rispondono entro 1 giorno
-
[Feature] 通知栏合并重复消息并显示次数Apertaarea:ui enhancement issue-form:feature platform:cross-platform review: high
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
1lck/Lithe-IDEA#1092 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
developmentseed/deck.gl-raster#693 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
Marker-Inc-Korea/AutoRAG#1801 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
iii-hq/iii#2278 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno