Пока в интернете я встречал только реализацию в 1С "Трехногого OAUth" (three-legged OAuth), где вызов API идет от имени конечного пользователя и обычно требуется подтверждение пользователя. Способ на мой взгляд нудноватый, поэтому я решил вызвать из 1Ски человеческую двуногую авторизацию: "two-legged OAuth," or "2LO".
Речь идет о модели авторизации, описанной:
Краткое с картинкой - https://developers.google.com/identity/protocols/OAuth2#serviceaccount
Подробное - https://developers.google.com/identity/protocols/OAuth2ServiceAccount
Этот способ требует создания и криптографического подписывания JSON Web Tokens (JWT). На данный момент встроенный Менеджер Криптографии 1С не умеет подписывать SHA256 хеш, а гугл другого не приемлет. В обработке цифровая подпись вычисляется "вручную" обычной арифметикой, без использования COM-криптопровайдера. Считает не более двух секунд.
Обработка получает токен от имени сервисной учетной записи моего тестового проекта. Scope запрашивается только для API spreadsheets. Для демонстрации работоспособности полученного токена, из формы обработки можно отправить изменение в солбец тестовой гугл-таблицы, а затем по указанному на форме адресу посмотреть результат.
Для получения токенов на api spreadsheets от имени Вашего сервис-аккаунта, необходимо в консоли разработчика https://console.developers.google.com создать-скачать json ключ сервисного аккаунта с доступом к api spreadsheets, и указать его в поле обработки "Путь файла ключа json". Токен своей учетки Вы получите, но при попытке изменить мою тестовую таблицу с таким токеном гугл вернет error 403 "PERMISSION_DENIED", поскольку у Вашего сервис-аккаунта нет доступа к моей таблице.
При воспроизведении в своей работе аналога продемонстрированного механизма не забудьте прописать нужные Вам "scope" в коде обработки и соответствующие API при запросе у гугла json-ключа. Также не забудьте расшарить доступ к объектам гугла, которые Вы хотите изменять или читать через API. Доступ нужно предоставлять емейлу Вашей сервисной учетной записи. Этот емейл можно найти внутри json ключа, в значении свойства "client_email", либо в моей обработке указать путь к Вашему json ключу и нажать кнопку "разобрать сертификат". Емейл отобразится в поле "Расшарить для емейла".
Важный момент: в операционной системе должно быть правильное время и правильный часовой пояс (используется функция 1с УниверсальноеВремя), иначе обработка запросит у гугла неверные дату начала и окончания срока действия токена, и токен не выдадут, в ответе будет что-то со словом time.
Для разбирающихся в криптографии. В ходе работы обработки средствами 1С происходит парсинг закрытого ключа PEM, BASE64 которого содержится в сертификате JSON. На вкладке "Парс сертификата json" в дерево выводится результат парсинга, и в ветке дерева "OCTET STRING" содержится SEQUENCE, в котором перечислены INTEGER - параметры закрытого и открытого ключей: Version, Modulus, publicExponent (Exponent, E), privateExponent (D), prime1 (P), prime2 (Q), exponent1 (dP или d mod (p-1)), exponent2 (dQ или d mod (q-1)), coefficient (InverseQ или InvQ или (inverse of q) mod p).