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

01.04.21

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

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

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

Наименование Файл Версия Размер
Клиент Контур.Диадок
.epf 7,61Kb
39
.epf 1 7,61Kb 39 Скачать

Для работы с 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    2270    9    aximo    4    

2

Как защитить pdf файл

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

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

2 стартмани

30.01.2023    1719    1    olevlasam    3    

3

Универсальный синтаксический анализатор ASN.1 для декодирования .key, .cer, .der, .p7m, .p7s, .crt, .pem

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

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

1 стартмани

04.12.2022    3071    12    keyn5565`    0    

13

Шифрование строки на основе мастер-пароля в 1С Предприятие 8.3.19

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

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

2 стартмани

31.08.2022    3901    7    vit59    2    

6

Обфускатор байт-кода

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

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

10 стартмани

16.06.2022    10620    82    ZhokhovM    12    

41

Как уберечь конструкторскую документацию от воровства конкурентами?

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

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

2 стартмани

09.03.2022    5721    3    ge_ni    9    

2

Защита конфигураций, обработок, расширений 1С онлайн, управление версиями

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

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

1 стартмани

27.12.2021    4637    2    idm80    11    

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

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

и некоторое количество денег
работа по API это платная услуга
Vida; klaus38; kir-24; elian; +4 Ответить
2. elian 137 06.04.21 14:31 Сейчас в теме
(1) кто его знает, может быть, Вам ключ разработчика и бесплатно дадут?... смотря как попросить, наверное...
3. capitan 2473 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": [
				[
					"Аварийное завершение",
					[],
					"",
					""
Показать



Каким образом еще можно расшифровать ответ сервиса?
Оставьте свое сообщение