Implementare un JWT di un account di servizio Google in Node.js

Il pacchetto npm googleapis è lo standard per le Google API.

Funziona. Ma aggiunge 380KB e oltre 450 dipendenze al tuo progetto.

Se hai bisogno di una sola API per uno script CI, non ti serve tutto quel peso.

Ho creato uno script per controllare lo stato di indicizzazione di un URL usando solo 60 righe di codice.

Utilizza tre moduli integrati di Node.js:

  • crypto
  • fetch
  • URL

Non aggiunge alcun pacchetto al tuo repository.

L'autenticazione degli account di servizio Google segue lo standard RFC 7523.

Ecco il processo:

  • Crea un JWT con la tua email client e la tua chiave privata.
  • Invia tramite POST quel JWT all'endpoint dei token di Google.
  • Ricevi un access token.
  • Usa quel token nell'header della tua richiesta API.

Un dettaglio critico: usa lo scope webmasters. Il più recente scope searchconsole non funzionerà per la URL Inspection API.

Devi usare la codifica Base64url per il JWT. La codifica Base64 standard richiede tre modifiche:

  • Rimuovi il padding.
  • Sostituisci + con -.
  • Sostituisci / con _.

La tua chiave privata di Google Cloud è già nel formato corretto. Non hai bisogno di librerie esterne per firmare il token.

Quando chiami l'endpoint dei token, registra la risposta di errore. Google fornisce motivi specifici per i fallimenti, come token scaduti o account di servizio mancanti.

Per la chiamata API vera e propria:

  • Imposta l'header Authorization su Bearer [token].
  • Assicurati che il tuo siteUrl corrisponda esattamente alla tua proprietà di Search Console.
  • Aggiungi l'email del tuo account di servizio come utente in Search Console.

Questo approccio funziona meglio per compiti specifici come le pipeline CI.

Non usarlo se hai bisogno di:

  • Più Google API.
  • Refresh automatici dei token.
  • Logica di retry complessa.
  • Codice per server di produzione con alta complessità.

Per un singolo task CI, 60 righe di codice sono meglio di 450 dipendenze. Comprendere questo flusso nativo rende anche più facile il debugging quando le librerie falliscono.

Fonte: https://dev.to/morinaga/rolling-a-google-service-account-jwt-in-nodejs-without-the-googleapis-package-22am