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

14.04.24

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

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

Задача: Требуется загрузка табличного документа в 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

См. также

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

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

36000 руб.

03.08.2020    17877    19    22    

17

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

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

7200 руб.

04.05.2021    20002    13    17    

17

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

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

22656 руб.

25.05.2021    14485    42    8    

18

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

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1485    1    0    

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

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


Это не совсем так. Проблема была в rs256. В простом использовании SHA256 или том же более распространенном, чем rs256, hs256 (HMAC) никакой проблемы не было
user2024991; +1 Ответить
2. hrom 69 05.06.24 10:34 Сейчас в теме
Платформа 8.3.20. Режим совместимости отключен

Тип не определен (ТокенДоступа)
ТокенДоступа = Новый <<?>>ТокенДоступа;
Оставьте свое сообщение