Получение авторизационного токена Диадок

1. tvalvor 15.10.24 09:09 Сейчас в теме
Добрый день.

Стоит задача, настроить интеграцию с Диадок посредством HTTP-запросов.
Ключ разработчика есть, API оплачен - через компоненту все работает.
При попытке получения авторизационного токена приходит код состояния 400 с ответом "Could not deserialize certificate from the request body".

Менеджер = Новый МенеджерКриптографии("Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider","",75);
	Хранилиище = Менеджер.ПолучитьХранилищеСертификатов(ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты,РасположениеХранилищаСертификатовКриптографии.ДанныеКомпьютера);
	Сертификаты = Хранилиище.ПолучитьВсе();
	
	Сертификат = Сертификаты[0];
	ДД = Сертификат.Выгрузить();
	
	Запрос = Новый Запрос;
	Запрос.Текст = "выбрать ApiClientId как ключ
					|из справочник.автомирпользователидиадок
					|где код = ""!Группа 1""";
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		КлючРазработчика = Выборка.Ключ;
	КонецЕсли;
	Запрос = Неопределено;
	
	Соединение = Новый HTTPСоединение("diadoc-api.kontur.ru",,,,,,Новый ЗащищенноеСоединениеOpenSSL());
	Запрос = Новый HTTPЗапрос("/v3/Authenticate?type=certificate");
	Запрос.Заголовки.Вставить("POST /v3/Authenticate?type=certificate HTTP/1.1");
	Запрос.Заголовки.Вставить("Host", "diadoc-api.kontur.ru");
	Запрос.Заголовки.Вставить("Content-Type", "octet-stream");
	Запрос.Заголовки.Вставить("Content-Length", "1252");
	Запрос.Заголовки.Вставить("Connection", "Keep-Alive");
	Запрос.Заголовки.Вставить("Authorization", "DiadocAuth ddauth_api_client_id=" + КлючРазработчика);
	Запрос.УстановитьТелоИзДвоичныхДанных(ДД);
	
	Попытка
		//Ответ = Соединение.ОтправитьДляОбработки(Запрос);
		ФайлРезультата = ПолучитьИмяВременногоФайла();
		Соединение.ОтправитьДляОбработки(Запрос, ФайлРезультата);
		Ответ = Новый ТекстовыйДокумент();
		Ответ.Прочитать(ФайлРезультата, КодировкаТекста.UTF8);
		СтрокаОтвета = Ответ.ПолучитьТекст();
	Исключение
		Сообщить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
	КонецПопытки;
Показать


Ткните, пожалуйста, что я делаю не так, и как надо сделать, чтобы заработало?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1880116 15.10.24 09:29 Сейчас в теме
(1)
Ткните
Ну понятно же написано: "Could not deserialize certificate from the request body". " Что в документации по поводу request body написано и что ты туда пихаешь?
3. tvalvor 15.10.24 09:35 Сейчас в теме
(2) Какие двоичные данные я только ни пытался передать в тело запроса - ответ тот же.
В документации только так написано: 400 Bad Request – данные в запросе имеют неверный формат или отсутствуют обязательные параметры.
Тех поддержка диадока попросила у меня файл открытого сертификата, проверила запрос с помощью, вероятно, postman и прислала скрин, что все ок, ответ 200. А дальше, говорят разбирайтесь сами, что вы там в тело запроса передаете.
В общем, на мой вопрос они так и не ответили. На гитхабе тоже тишина. Я уже просто не понимаю, что именно нужно передать и откуда это взять.
4. user1880116 15.10.24 09:37 Сейчас в теме
(3)
400 Bad Request – данные в запросе имеют неверный формат
В документации на эндпоинт, в который ты сырые двоичные данные суешь, что написано? Слово "deserialize" прямо кричит.
5. tvalvor 15.10.24 09:40 Сейчас в теме
(4) Вы можете написать как это должно выглядеть? Был бы весьма благодарен.
Для меня "deserialize" ни о чем не говорит, сколько ни гуглил - ничего не нашел похожего или внятно разжеванного.
6. user1880116 15.10.24 09:46 Сейчас в теме
(5)
Вы можете написать
У меня, к сожалению, с Диадоком договор. Я не ищу и разжевываю их документацию, а они не пишут на форум.
7. tvalvor 15.10.24 09:50 Сейчас в теме
(6) Очень жаль. Ждем других...
8. kuzev 48 15.10.24 09:57 Сейчас в теме
Вы уверены, что корректно получаете сертификат (слепок) из хранилища?
9. tvalvor 15.10.24 10:01 Сейчас в теме
(8) Я первый раз работаю с сертификатами и с HTTP-запросами (ну, так получилось). Я ни в чем не уверен.
Этт способ получения сертификатов выдал мне хоть какие-то данные (во всяком случае данные нужного сертификата).
10. kuzev 48 15.10.24 10:12 Сейчас в теме
11. tvalvor 15.10.24 10:55 Сейчас в теме
(10) Версия КриптоПро 4.0.9963.
Вы хотите сказать, что дело в "GOST R 34.10-2001"? Это я брал из интернетов, вполне возможно, что и что-то устаревшее.
Попробовал поменять на 34.10-2012, упала ошибка "Ошибка при получении контекста модуля криптографии"
12. kuzev 48 15.10.24 11:19 Сейчас в теме
(11) Рекомендую обновить КриптоПро до версии 5.0.ххххх.
13. tvalvor 30.10.24 08:39 Сейчас в теме
(12) Не помогло. Все равно не получается десериализовать.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот