Контур Диадок API. Аутентификация. Сертификат ЭЦП

01.04.21

Разработка - Защита ПО и шифрование

Подробно рассматриваем процесс аутентификации в системе Контур.Диадок при помощи сертификата электронной цифровой подписи. Получаем аутентификационный токен и выполняем простой запрос для проверки работоспособности токена.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Клиент Контур.Диадок
.epf 7,61Kb ver:1
47
47 Скачать (1 SM) Купить за 1 850 руб.

Для работы с API Контур.Диадок необходимо получить ключ разработчика, для этого обратитесь в техническую поддержку Контур.Диадок.

Процедура аутентификации сертификатом состоит из двух запросов: сначала запрос Authenticate а затем запрос AuthenticateConfirm.

Нас интересует запрос Authenticate с типом certificate:

АдресРесурса = "/V3/Authenticate?type=certificate";

В запрос Authenticate в качестве тела запроса передаются двоичные данные выбранного сертификата. Прилагаемая обработка приспособлена для типовых конфигураций, в которых реализован справочник "Сертификаты ключей электронной подписи и шифрования". При работе с этим справочником двоичные данные сертификата можно получить готовой функцией:

ДвоичныеДанныеСертификата = Сертификат.ДанныеСертификата.Получить();

Двоичные данные сертификата затем записываются в файл и тело запроса устанавливается из файла.

В теле ответа на запрос Authenticate возвращается зашифрованный текст, который нужно расшифровать, используя имеющийся сертификат ЭЦП. Для этого можно использовать встроенный объект 1С "Менеджер криптографии". Заметим, что вызывая функцию Расшифровать() менеджера криптографии, мы не указываем никакого конкретного сертификата, потому что этот метод пытается выполнить расшифровку используя все доступные сертификаты.

После успешной расшифровки, расшифрованные данные нужно закодировать по алгоритму base64, на что в 1С также предусмотрен готовый метод. После кодирования в base64 эти данные нужно подготовить для передачи в запрос в качестве URL-параметра, поэтому следует дополнительно кодировать строку по методу URL и только потом уже формировать адрес ресурса второго запроса:

ДанныеBase64URL = КодироватьСтроку(ДанныеBase64, СпособКодированияСтроки.КодировкаURL);
АдресРесурса = "/V2/AuthenticateConfirm?token=" + ДанныеBase64URL;

Во второй запрос, также как и в первый, в тело запроса передаются двоичные данные сертификата. И второй запрос возвращает для нас уже готовый для использования токен.

Для теста на работоспособность на форме обработки есть вторая кнопка "Организации", которая выполняет запрос GetMyOrganizations. Для выполнения запроса в заголовок передается не только ключ разработчика, но и полученный токен:

Заголовки.Вставить("Authorization", "DiadocAuth ddauth_api_client_id=" + КлючРазработчика + ",ddauth_token=" + Токен);

Внутри обработки вы найдете аккуратный отлаженный код, который я запускал на платформе 8.3.18.1208 на типовой конфигурации Бухгалтерия предприятия 3.0.87.22. Но, повторюсь, обработка сохранит работоспособность в любой типовой конфигурации реализующей справочник "Сертификаты ключей электронной подписи и шифрования".

Контур Диадок Сертификат ЭЦП

См. также

Защита ПО и шифрование Программист Платформа 1С v8.3 1С:Бухгалтерия 3.0 Абонемент ($m)

Представляю вам микрорасширение, которое запрещает глобальный поиск по вашей конфигурации.

1 стартмани

09.02.2023    2695    11    aximo    5    

2

Защита ПО и шифрование Программист Абонемент ($m)

Для установки защиты pdf документа, полученного в 1С, написано консольное приложение на c#., использующее одну зависимость pdfSharp.dll. В результате работы приложения ограничены операции над документом и записаны метаданные. С помощью аргументов командной строки можно управлять работой приложения.

2 стартмани

30.01.2023    2124    2    olevlasam    3    

3

Защита ПО и шифрование Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Универсальный синтаксический анализатор ASN.1, который может декодировать любую допустимую структуру ASN.1 DER или BER, независимо от того, закодирована ли она в кодировке Base64 (распознаются необработанные base64, защита PEM и begin-base64) или в шестнадцатеричном кодировании.

1 стартмани

04.12.2022    3556    16    keyn5565`    0    

14

Защита ПО и шифрование Программист Платформа 1С v8.3 Абонемент ($m)

Демонстрация возможностей шифрования строки на основе мастер-пароля в 1С Предприятие 8.3.19. AES без zip файла, RSA, PKDF2. (c использованием библиотеки С# через com).

2 стартмани

31.08.2022    4439    9    vit59    2    

6

Защита ПО и шифрование Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Обработка, позволяющая запутывать и шифровать байт-код, поставлять модули без исходных текстов и т.д. Работает только в файловом варианте с версии платформы 8.3.18 из-за асинхронных конструкций "Асинх" и "Ждать". Протестировано на платформе 8.3.25.1394.

10 стартмани

16.06.2022    12625    104    ZhokhovM    12    

45

Защита ПО и шифрование Программист Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Как уберечь конструкторскую документацию от воровства конкурентами? Недавно столкнулся с этой проблемой. Заказчик серьёзно обеспокоен утечкой информации о конструкторских разработках в адрес конкурентов, за счет подкупа исполнителей, занимающихся производством по конструкторской документации, операторов технологического оборудования и обрабатывающих центров по изготовлению деталей и сборочных единиц.

2 стартмани

09.03.2022    6107    3    ge_ni    9    

2

Защита ПО и шифрование Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Система построена на веб платформе, все управление происходит на сайте в личном кабинете пользователя.

1 стартмани

27.12.2021    5075    2    idm80    12    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. capitan 2507 06.04.21 09:57 Сейчас в теме
Вспоминается...
Некоторые видео с рецептами должны начинаться с фразы "возьмите выходной и половину зарплаты"....

Для работы с API Контур.Диадок необходимо получить ключ разработчика, для этого обратитесь в техническую поддержку Контур.Диадок.

и некоторое количество денег
работа по API это платная услуга
Vida; klaus38; kir-24; elian; +4 Ответить
2. elian 137 06.04.21 14:31 Сейчас в теме
(1) кто его знает, может быть, Вам ключ разработчика и бесплатно дадут?... смотря как попросить, наверное...
3. capitan 2507 06.04.21 14:41 Сейчас в теме
(2)Дело в том, что синхронизация по Диадок API и синхронизация модулем 1С это разные услуги.
Хотя в конечном итоге модуль 1С все равно по Диадок API запрашивает данные
Я просто пока не очень понимаю профит вашей обраьотки
Можно же посмотреть в самом модуле контура эти запросы.
В че6м профит ?
4. elian 137 06.04.21 17:02 Сейчас в теме
(3) Исходя из ваших рассуждений, профит в том, что не надо смотреть в "модуль контура". Я, например, даже не знаю, о чем вы говорите. Что за "модуль контура"? У меня его нет, например. Возможно и у других людей его нет. А тут красивый отлаженный код с комментариями. Вот вам и профит! А в "модуле контура" есть хоть какие-то пояснения?
5. kir-24 02.06.21 13:24 Сейчас в теме
(1) Да немного странно. ИМХО программист должен получать доход от эксплуатации своего произведения. А тут программист платит за то, чтобы его прога с использованием API Контур.Диадок работала у клиента. При этом нужно дань отдавать ежегодно иначе клиенты съедят.
6. elian 137 02.06.21 15:35 Сейчас в теме
(5) В каком это смысле "программист платит"? Платит клиент. Просто он платит и Контуру и мне. Лично я ничего не плачу. Это клиент хочет автоматизацию работы с Контуром. А контур хочет денег за своё АПИ, его право.
7. Maznud 24.09.21 14:41 Сейчас в теме
(6)Здравствуйте, тоже занимаюсь интеграцией диадок АПИ в 1С.Ау тентификацию делаю через логин-пароль правда. Скажите пожалуйста как получить ЭП в формате CMS SignedData в DER-кодировке? Как это делается силами 1С?
8. elian 137 24.09.21 17:06 Сейчас в теме
(7) не знаю... всё, с чем я разобрался, я описал в статье и в прилагаемой обработке... ни с чем другим я не разбирался, так как не было нужды ))
9. sanfoto 502 19.07.22 09:37 Сейчас в теме
Нормально получать инфу код ниже. Важно ""application/json""

АдресСайта = "diadoc-api.kontur.ru/GetMyOrganizations";
	HTTPЗапрос2 = Новый HTTPЗапрос;
	HTTPЗапрос2.Заголовки.Вставить("GET /GetMyOrganizations HTTP/1.1");
	HTTPЗапрос2.Заголовки.Вставить("Host", "diadoc-api.kontur.ru");
	HTTPЗапрос2.Заголовки.Вставить("Authorization", "DiadocAuth ddauth_api_client_id="+ddauth_api_client+",ddauth_token="+ПолеДокумента1);
	
	HTTPЗапрос2.Заголовки.Вставить("Accept",		"application/json");  // без этого вернется протобуфер
	HTTPЗапрос2.Заголовки.Вставить("Content-Type",	"application/json; charset=utf-8");
Показать
10. jeyrico 26.04.24 13:32 Сейчас в теме
ОтветАпи = Результат.ПолучитьТелоКакДвоичныеДанные();	
	КриптоМенеджер = Новый МенеджерКриптографии;
	РасшифрованныйОтвет = КриптоМенеджер.Расшифровать(ОтветАПИ, Новый СертификатКриптографии(ДанныеСертификата));
	

На платформе 8.3.24.1368 метод "v3/Authenticate?type=certificate" возвращает КодСостояния 200 и в теле ответа двоичные данные, а на Расшифровать() платформа падает
"errorInfo": {
		"systemErrorInfo": {
			"clientStack": "ext.dll:0x000000000013CADD unknown:0x0000000000000000 unknown:0x0000000000000000 unknown:0x0000000000000000 unknown:0x0000000000000000 ext.dll:0x0000000000517AE8 nuke83.dll:0x0000000000002BC1 nuke83.dll:0x00000000001C8520 unknown:0x0000000000000000 unknown:0x0000000000000000 unknown:0x0000000000000000 unknown:0x0000000000000000 nuke83.dll:0x0000000000002755 nuke83.dll:0x00000000001C8520 unknown:0x0000000000000000 ext.dll:0x00000000004ED070 ",
			"clientStackHash": "B099C3A30DF0F18D1A9423BB00F3076D",
			"systemCrash": true
		},
		"applicationErrorInfo": {
			"errors": [
				[
					"Аварийное завершение",
					[],
					"",
					""
Показать



Каким образом еще можно расшифровать ответ сервиса?
11. b2bro 10 13.09.24 10:20 Сейчас в теме
(10)
у меня получилось вот так
			ТекущийСертификат = ЭлектроннаяПодписьСлужебный.ПолучитьСертификатПоОтпечатку(текСтрокаСертификат.Отпечаток, Истина);
	
			HTTPОтвет = HTTPPost(HTTPСоединение, ТекстЗапросаАвторизация(АдресРесурса, ТекущийСертификат));  
			
			ДвоичныеДанные = HTTPОтвет.ПолучитьТелоКакДвоичныеДанные(); 
		
			Возврат РасшифроватьДанные(ДвоичныеДанные, ТекущийСертификат);

Функция РасшифроватьДанные(ЗашифрованныеДанные, Сертификат)

	МенеджерКриптографии = Новый МенеджерКриптографии("", "", 75);
	
	РасшифрованныеДанные = МенеджерКриптографии.Расшифровать(ЗашифрованныеДанные, Сертификат);
	
	Результат = Base64Строка(РасшифрованныеДанные);
	Результат = СтрЗаменить(Результат, Символы.ВК, "");
	Результат = СтрЗаменить(Результат, Символы.ПС, "");
	
	Возврат Результат;
	
КонецФункции

Показать


т.е. немного не так работаю с сертификатом
Обратите внимание, что должен быть еще пароль от закрытого ключа (просто у меня его нет)
МенеджерКриптографии.Расшифровать(ЗашифрованныеДанные, Сертификат, Пароль)
12. b2bro 10 23.09.24 08:37 Сейчас в теме
Вопрос. А дальше то есть разработка?
Подписание документа интересует. Get Запросы можно и с авторизацией по логину реализовать
13. elian 137 24.09.24 10:35 Сейчас в теме
(12) Конечно, есть! А вы с какой целью интересуетесь?
14. b2bro 10 24.09.24 11:40 Сейчас в теме
(13) пытаюсь сделать подписание накладной. но не совсем пока получилось вкурить в документацию апи в диадоке. как формируется RecipientTitles.content, RecipientTitles.signature и signatures.signature
Оставьте свое сообщение