новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума
Яндекс-директ

Авторизация 1С OAuth 2.0 в API Google и получение access token для учетной записи сервиса, не требует подтверждения пользователя

  • Добавить свою разработку
 
Денис
Связаться с автором
24.03.2018 05:48:33
0
Обработка получает google api access token методом two-legged OAuth (2LO), это вариант сервер-сервер с цифровой подписью, когда не требуется подтверждение пользователя. Заполняет гугл-таблицу через API. При ее работе также происходит парсинг закрытого ключа PEM, результат парса выводится в форму.
Скриншоты
Описание

Пока в интернете я встречал только реализацию в 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).

Ключевые слова:      Google API   OAuth 2   JWT   access token   Криптография   Цифровая подпись   токен   закрытый ключ   PEM   сертификат ключа   Google spreadsheets   Гугл таблицы
Файлы для скачивания
  • 500р
    • GetGooglAPIAccessToken2LO_v11.epf (20Kb)
    • Получение google api access token, платформы 8.3.10+
    • Получение токена с использованием цифровой подписи, разбор закрытого ключа PEM, отправка данных в столбец таблицы гугл
    • дата загрузки: 19.06.2020 11:01:58
  • 500р
    • GetGooglAPIAccessToken2LO_839_v11.epf (21Kb)
    • Получение google api access token, платформа 8.3.9
    • Получение токена с использованием цифровой подписи, разбор закрытого ключа PEM, отправка данных в столбец таблицы гугл
    • дата загрузки: 19.06.2020 11:02:53
Скачать все файлы одним архивом (41Kb)
0
    Еще от автора
    ≡ к списку разработок
    Яндекс-директ