Создание Google Service Account JWT в Node.js

Пакет googleapis для npm является стандартом для Google APIs.

Он работает. Но он добавляет 380 КБ и более 450 зависимостей в ваш проект.

Если вам нужен всего один API для CI-скрипта, вам не нужен такой большой вес.

Я написал скрипт для проверки статуса индексации URL, используя всего 60 строк кода.

Он использует три встроенных модуля Node.js:

  • crypto
  • fetch
  • URL

Он не добавляет ни одного стороннего пакета в ваш репозиторий.

Авторизация сервисного аккаунта Google соответствует стандарту RFC 7523.

Вот этот процесс:

  • Создайте JWT, используя ваш client email и private key.
  • Отправьте этот JWT методом POST на эндпоинт токенов Google.
  • Получите access token.
  • Используйте этот токен в заголовке вашего API-запроса.

Один критически важный нюанс: используйте scope webmasters. Новый scope searchconsole не будет работать для URL Inspection API.

Для JWT необходимо использовать кодировку Base64url. Стандартный Base64 требует трех изменений:

  • Удалите padding.
  • Замените + на -.
  • Замените / на _.

Ваш private key из Google Cloud уже находится в правильном формате. Вам не нужны внешние библиотеки для подписи токена.

При вызове эндпоинта токенов логируйте ответ об ошибке. Google предоставляет конкретные причины сбоев, такие как истекшие токены или отсутствие сервисных аккаунтов.

Для самого API-вызова:

  • Установите заголовок Authorization в значение Bearer [token].
  • Убедитесь, что ваш siteUrl точно соответствует свойству в Search Console.
  • Добавьте email вашего сервисного аккаунта в качестве пользователя в Search Console.

Этот подход лучше всего подходит для узкоспециализированных задач, таких как CI-конвейеры.

Не используйте этот метод, если вам нужны:

  • Несколько Google APIs.
  • Автоматическое обновление токенов.
  • Сложная логика повторных попыток (retry logic).
  • Код для продакшн-серверов с высокой степенью сложности.

Для одной задачи в CI 60 строк кода лучше, чем 450 зависимостей. Понимание этого базового процесса также облегчает отладку в случае сбоя библиотек.

Источник: https://dev.to/morinaga/rolling-a-google-service-account-jwt-in-nodejs-without-the-googleapis-package-22am