Générer un JWT de compte de service Google dans Node.js

Le package npm googleapis est le standard pour les Google APIs.

Il fonctionne. Mais il ajoute 380 Ko et plus de 450 dépendances à votre projet.

Si vous n'avez besoin que d'une seule API pour un script CI, vous n'avez pas besoin d'un tel poids.

J'ai conçu un script pour vérifier le statut d'indexation d'une URL en seulement 60 lignes de code.

Il utilise trois modules intégrés de Node.js :

  • crypto
  • fetch
  • URL

Il n'ajoute aucun package à votre dépôt.

L'authentification des comptes de service Google suit la norme RFC 7523.

Voici le processus :

  • Créer un JWT avec votre e-mail client et votre clé privée.
  • Envoyer (POST) ce JWT au point de terminaison de jeton Google.
  • Recevoir un jeton d'accès.
  • Utiliser ce jeton dans l'en-tête de votre requête API.

Un détail crucial : utilisez le scope webmasters. Le nouveau scope searchconsole ne fonctionnera pas pour l'URL Inspection API.

Vous devez utiliser l'encodage Base64url pour le JWT. Le Base64 standard nécessite trois modifications :

  • Supprimer le padding.
  • Remplacer + par -.
  • Remplacer / par _.

Votre clé privée provenant de Google Cloud est déjà au bon format. Vous n'avez pas besoin de bibliothèques externes pour signer le jeton.

Lorsque vous appelez le point de terminaison du jeton, journalisez la réponse d'erreur. Google fournit des raisons spécifiques pour les échecs, comme des jetons expirés ou des comptes de service manquants.

Pour l'appel API lui-même :

  • Définissez l'en-tête Authorization sur Bearer [token].
  • Assurez-vous que votre siteUrl correspond exactement à votre propriété Search Console.
  • Ajoutez l'e-mail de votre compte de service en tant qu'utilisateur dans Search Console.

Cette approche est idéale pour des tâches spécifiques comme les pipelines CI.

Ne l'utilisez pas si vous avez besoin de :

  • Plusieurs Google APIs.
  • Rafraîchissements automatiques de jetons.
  • Une logique de tentatives complexe.
  • Du code de serveur de production à haute complexité.

Pour une tâche CI unique, 60 lignes de code valent mieux que 450 dépendances. Comprendre ce flux brut facilite également le débogage lorsque les bibliothèques échouent.

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