Google Spreadsheet и JWT ТокенДоступа (нативная реализация, только 1С 8.3.21 с использованием service account)

14.04.24

Интеграция - WEB-интеграция

Реализация работы с google таблицами, сервисным аккаунтом, типовыми методами 1С 8.3.21.

Скачать исходный код

Наименование Файл Версия Размер
Google Spreadsheet и JWT ТокенДоступа (нативная реализация, только 1С 8.3.21 с использованием srvice account):
.epf 7,54Kb
12
.epf 7,54Kb 12 Скачать бесплатно
Google Spreadsheet и JWT ТокенДоступа (нативная реализация, только 1С 8.3.21 с использованием srvice account):
.cfe 12,13Kb
13
.cfe 12,13Kb 13 Скачать бесплатно

Задача: Требуется загрузка табличного документа в google таблицу. Также желательно иметь возможность получить google таблицу прямо в 1С.

Условие: без использования сторонних библиотек.

У "google sheet" имеется достаточно развитая API. С ней как бы проблем нет, стандартный REST API.

Почитав русскоязычные источники, выяснилось, что основная проблема это авторизация в google api средствами JWT. До платформы 8.3.21 - это было действительно проблемой, так как в 1С отсутствовала поддержка подписания токена алгоритмом sha256.

С выходом платформы 8.3.21, в 1С появился новый объект ТокенДоступа (AccessToken), его мы и будем использовать в решении данной задачи.

Описывать создание сервисного аккаунта не буду. Есть много видео по этой теме. В результате у вас должен быть в наличии JSON файл сервисного пользователя с правами на "Google Sheets API".

 

Разберем создание JWT токена:

Функция ПолучитьJWTТокен()
	ТокенДоступа = Новый ТокенДоступа;
	
	//Алгоритм шифования
	//Google API использует алгоритм "RS256"
	ТокенДоступа.Заголовки.Вставить("alg", "RS256");
	//Формат токена
	//Google API использует формат "JWT"
	ТокенДоступа.Заголовки.Вставить("typ", "JWT");
	
	//iss - Адрес электронной почты service account
	//Данный параметр находится в JSON файле, в свойстве "client_email"
	ТокенДоступа.Эмитент = "test@test-11.iam.gserviceaccount.com";
	
	//scope - Список областей, разделенных пробелами, которые определяют ресурсы,
	//к которым ваше приложение может получить доступ от имени пользователя.
	//Для работы с google таблицами нам хватит двух:
	//"https://www.googleapis.com/auth/spreadsheets"
	//"https://www.googleapis.com/auth/drive"
	ТокенДоступа.ПолезнаяНагрузка.Вставить("scope", "https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive");
	
	//aud - A descriptor of the intended target of the assertion
	// или дескриптор предполагаемой цели утверждения.
	//Данный параметр находится в JSON файле, в свойстве "token_uri"
	//И на текущий момент всегда равен "https://oauth2.googleapis.com/token"
	ТокенДоступа.ПолезнаяНагрузка.Вставить("aud", "https://oauth2.googleapis.com/token");
	
	//Дополнительно нам нужно указать 2 параметра
	//что бы задать время жизни токена
	
	//Первый iat - Числовое значение времени создания токена доступа в формате UnixTime
	ТокенДоступа.ВремяСоздания = ТекущаяУниверсальнаяДата() - Дата(1970,1,1,0,0,0);
	//Второй exp - Числовое значение времени истечения срока действия токена
	//в формате UnixTime. Максимум 1час после iat.
	//Вычисляется как iat + 1час
	ТокенДоступа.ВремяЖизни = ТокенДоступа.ВремяСоздания + 60 * 60;             
	//Тут вроде всё хорошо, но 1С упорно, не верно вычисляет время exp
	//По этому мы переопределим данный параметр через полезную нагрузку.
	ТокенДоступа.ПолезнаяНагрузка.Вставить("exp", Формат(ТокенДоступа.ВремяЖизни, "ЧГ="));
	
	//JWT - Последняя часть формирования токена - это создание подписи.
	//Для подписи нам потребуется ключ в формате PEM
	//взять его можно так же из файла JSON, в свойстве "private_key"
	ТокенДоступа.Подписать(АлгоритмПодписиТокенаДоступа.RS256, "-----BEGIN PRIVATE KEY-----
	|MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC7VJTUt9Us8cKj
	|................................................................
	|dn/RsYEONbwQSjIfMPkvxF+8HQ==
	|-----END PRIVATE KEY-----");
	
	//Сам JWT токен, это сроковое представление объекта ТокенДоступа
	Возврат Строка(ТокенДоступа);	
КонецФункции

 

Запрос получения токена доступа:

Функция ПолучитьНовыйТокен(Знач Токен)
	//Создаем заголовки для запроса
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");	
	
	//Формируем строку запроса
	//основной параметр тут "grant_type"
	//на данный момент он имеет статичное значение
	//"urn:ietf:params:oauth:grant-type:jwt-bearer"
	grant_type = КодироватьСтроку("urn:ietf:params:oauth:grant-type:jwt-bearer", СпособКодированияСтроки.КодировкаURL);	
	ПараметрыЗапроса = СтрШаблон("grant_type=%1&assertion=%2", grant_type, Токен);	
	ЗапросТекст = СтрШаблон("/token?%1", ПараметрыЗапроса);
	
	//Отправляем POST запрос с нашим токеном в качестве параметра.
	Соединение = Новый HTTPСоединение("oauth2.googleapis.com", 443,,,, 30, Новый ЗащищенноеСоединениеOpenSSL);
	HTTPЗапрос = Новый HTTPЗапрос(ЗапросТекст, Заголовки);
	Результат = Соединение.ОтправитьДляОбработки(HTTPЗапрос);	
	
	//И получаем "access_token"
	//используемый для дальнейшей работы с google api
	Если Результат.КодСостояния = 200 Тогда
		ЧтениеJSON = Новый ЧтениеJSON;
		ЧтениеJSON.ОткрытьПоток(Результат.ПолучитьТелоКакПоток());
		Возврат ПрочитатьJSON(ЧтениеJSON, Истина).Получить("access_token");
	КонецЕсли;	                                           
	Возврат Неопределено;
КонецФункции

 

Google spreadsheets sheets JWT ТокенДоступа 8.3.21

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    16079    13    18    

13

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    18151    10    15    

16

Автоматическая загрузка файлов (например, прайс-листов) из электронной почты, FTP, HTTP, их обработка и выгрузка на FTP (на сайт) и для других целей

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

25200 руб.

28.05.2015    85368    26    51    

50

Модуль для обмена "1С:Предприятие 8. УАТ. ПРОФ" с FortMonitor

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    12989    33    8    

12

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16607    43    49    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bayselonarrend 1272 15.04.24 06:45 Сейчас в теме
Хорошо, что нечто подобное появилось

в 1С отсутствовала поддержка подписания токена алгоритмом sha256


Это не совсем так. Проблема была в rs256. В простом использовании SHA256 или том же более распространенном, чем rs256, hs256 (HMAC) никакой проблемы не было
user2024991; +1 Ответить
Оставьте свое сообщение