Имя: Пароль:
1C
 
Токен авторизации ЧЗ : Код состояния HTTP: 400. data не валидна
☑
0 linarval
 
09.10.26
✎
14:01
Добрый день.
Кто-нибудь сталкивался ?

При попытке обновить токен ЧЗ в 1С,  выдает ошибку:
При выполнении запроса api/v3/true-api/auth/simpleSignIn возникла ошибка.
Код состояния HTTP: 400.
Текст ошибки: {
"error_message": "data не валидна"
}.

На прошлой неделе все работало, щас в никакую. Патч EF_00_00944621 не помог.
1 NikeArz
 
09.10.26
✎
14:28
Да была такая ошибка.
После получения 1 части. data надо перевести в BASE64.
Потом подписать. Когда будете подписывать укажите что
CADESCOM_BASE64_TO_BINARY = 1; // входные данные пришли в Base64
2 linarval
 
09.10.26
✎
14:33
(1) Не до конца понял, что за первая часть
При получении ключа сессии у нас дата же и так переводится в base64
https://yapx.ru/album/eRv1L
3 NikeArz
 
09.10.26
✎
14:38
(2) Ищите где подписывается data.
CADESCOM_BASE64_TO_BINARY = 1; // входные данные пришли в Base64

У вас скорее всего CADESCOM не понимает что data в BASE64
4 NikeArz
 
09.10.26
✎
14:39
(2) У меня самописка. На вашей кон-фе не могу подробнее показать.
5 NikeArz
 
09.10.26
✎
14:41
(2) Функция ПодписатьCAdES(ТекстДляПодписи, ComОбъектСертификата)
6 NikeArz
 
09.10.26
✎
14:50
В ЧЗ документация по API. Там подробно об этом сказано.
7 linarval
 
09.10.26
✎
14:57
(5) У меня при актуализации токена не идет в методы связанные с CADESCOM. Во всех конфе ERP, я нашел только два места где они используются.
8 NikeArz
 
09.10.26
✎
15:38
1. Получение пары «uuid — data», где «uuid» — идентификатор текущей аутентификации,
«data» — строка на подпись пользователю.
2. Запрос авторизации обязателен для получения токена в формате jwt.
3. Отправка в Систему маркировки данных в том же виде, в котором данные были получены
(пара «uuid — data»), только теперь «data» — это подписанная УКЭП строка.
4. Сервер отвечает на запрос сообщением с кодом 200 (ОК), либо сообщением об ошибке.
URL: /auth/key
Метод: GET
Пример строки запроса:
curl -X GET "<url стенда v3>/auth/key"-H "accept: application/json"
Параметры ответа:
Параметр
Тип
Обяз.
Описание
uuid
string
+
Уникальный идентификатор сгенерированных
случайных данных
data
string
+
Случайная строка данных
Пример ответа:
{
}
   "uuid":"a63ff582-b723-4da7-958b-453da27a6c62",
   "data":"GNUFBAZBMPIUUMLXNMIOGSHTGFXZMT"
1.5.2. Получение ключа сессии при единой аутентификации
ПРИМЕЧАНИЕ Поддержка токена в формате JWT сохранена до конца 2026 года
URL: /auth/simpleSignIn
Метод: POST
Пример строки запроса:
19
curl -X POST "<url стенда v3>/auth/simpleSignIn"-H "accept: application/json"-H "Content-Type: application/json"
Пример тела запроса:
{
   "uuid":"string",
   "data":"string",
   "inn":"string",
   "details": "string",
   "unitedToken": true
}
Параметры тела запроса:
Параметр Тип Обяз. Описание Комментарий
uuid string + Уникальный
идентификатор
подписанных
случайных данных
Длина значения: 36 символов
Допустимые символы: цифры,
буквы латинского алфавита,
дефис (-)
data string + Подписанные УКЭП
зарегистрированного
участника оборота
товаров случайные
данные в base64
(присоединённая
электронная подпись)
inn string-ИНН организации, под
которой требуется
авторизация
При получении токена в одном
из форматов (UUID / JWT)
обязательно указывается ИНН
организации, если у
физического лица (пользователя
организации) есть действующая
МЧД для получения доступа к
ГИС МТ. В остальных случаях
параметр необязателен
Длина значения: 10 или 12 цифр
20
Параметр Тип Обяз. Описание Комментарий
details string-Реквизиты
действующего
аттестата соответствия
объекта
информатизации,
выданного органом по
аттестации объектов
информатизации
unitedToken boolean-Признак запроса
единого токена в виде
uuid
Обязательно заполнен при
получении токена в формате
UUID.
true — запрос токена в формате
UUID (единый токен
аутентификации);
false — запрос токена в формате
jwt (по умолчанию)
Пример ответа:
1. В случае успеха получения токена в формате JWT:
{
   "token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e.........mk6qe0lB12w9zEs"
}
2. В случае успеха получения токена в формате UUID:
{
  "token": "string",
  "uuidToken": "123e4567-e89b-12d3-a456-426655440000",
  "expireDate": "2026-10-10T00:00:00.123Z"
}
9 MWWRuza
 
гуру
09.10.26
✎
17:08
data просто подписываете прикрепленной ЭЦП как есть, ничего специально, заранее, переводить в Басе64 не нужно. Единственное, если КриптоПро возвращает ЭЦП блоками, то переводы строк надо убрать, должна быть одна длинная строка.
Если что - у меня это все в 7.7 работает нормально, не разберетесь, можно будет посмотреть как у меня сделано и тогда Вам возможно проще у себя ошибку найти будет.
10 linarval
 
09.10.26
✎
17:26
(9) Можете пожалуйста показать?
11 MWWRuza
 
гуру
09.10.26
✎
17:40
(10) Что конкретно не получается?
12 MWWRuza
 
гуру
09.10.26
✎
17:41
Подпись сформировалась?
Покажите? Можно картинкой...
13 MWWRuza
 
гуру
09.10.26
✎
17:51
Должно получиться перед передачей в запрос, что-то типа такого:


Кусок естественно вырезан, но, понять можно - одна большая строка, 4 с лишним тысячи символов длиной.
14 linarval
 
09.10.26
✎
17:52
(12) Я не могу найти метод для подписания data
15 MWWRuza
 
гуру
09.10.26
✎
18:18
(14) Ах, вон оно что...
Тут сложнее. Я вообще-то клюшечник застарелый, и х.з., как это правильно в типовых 8.3 делается.
Но, один раз я все-таки делал в 8.3, но "по своему разумению", наверняка это велосипед, и там скорее всего свои методы для этого есть. Но, работает!
Вот, Подписание КриптоПро:
Подробности
&НаКлиенте
Функция ПодписатьТекстЦРПТ(ТекстДляПодписи, Сертификат, bDetached)
	ВходящиеДвоичныеДанные = Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(ТекстДляПодписи));
	CADESCOM_BASE64_TO_BINARY = 1; // Входные данные пришли в Base64
	CADESCOM_CADES_TYPE = 1; // Тип усовершенствованной подписи
	CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0; // Атрибут штампа времени подписи
	oSigner = Новый COMОбъект("CAdESCOM.CPSigner");
	oSigner.Certificate = Сертификат;
	oSigningTimeAttr = Новый COMОбъект("CAdESCOM.CPAttribute");
	oSigningTimeAttr.Name = CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
	oSigningTimeAttr.Value = ТекущаяДата();
	oSigner.AuthenticatedAttributes2.Add(oSigningTimeAttr);
	ТекстДляПодписи = СокрЛП(ТекстДляПодписи);
	oSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData");
	oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
	oSignedData.Content = ВходящиеДвоичныеДанные;
	EncodingType = 0;
	sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType);
	Возврат sSignedMessage; // Подпись в формате Base64
КонецФункции

Третий параметр, bDetached, булево - true прикрепленная, false открепленная.
Разбирайтесь, не получится пишите, посмотрим.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший