При автоматизации работы с системой маркировки «Честный ЗНАК» (ГИС МТ) разработчики часто сталкиваются с вопросом: как система ведет себя, если в одной организации работают несколько сотрудников, каждый со своей электронной подписью (УКЭП)? Возникает опасение, что получение нового токена авторизации для одного пользователя может «выбить» сессию другого. Разберем эту ситуацию подробно, проанализируем механизмы работы API ЦРПТ и выясним, как правильно реализовать программную логику в 1С.
Для начала проанализируем, как именно сервер ЦРПТ выдает права доступа. Токен авторизации (обычно это JWT-токен со сроком жизни 10 часов) не привязан к организации «в общем». Он выдается на конкретную связку: УКЭП (сертификат) + учетная запись пользователя.
Рассмотрим стандартную ситуацию: в организации есть два сотрудника, Иван и Мария. У каждого свой физический носитель с ЭЦП и своя учетная запись в личном кабинете ГИС МТ. Когда Иван авторизуется через API, система генерирует для него уникальный token_1. Когда через 5 минут Мария делает то же самое со своей подписью, система генерирует token_2. Эти токены существуют в системе параллельно и имеют независимые сроки жизни. Таким образом, работа нескольких сотрудников с разными ЭЦП абсолютно легитимна и поддерживается системой на архитектурном уровне.
В обсуждениях часто упоминается ситуация: при попытке зайти со второго рабочего места первый токен как будто перестает работать или система «зависает» на этапе авторизации. Разберем основные причины этого поведения:
Если ваша задача связана не только с получением информации, но и с эмиссией (заказом) кодов маркировки, важно учитывать специфику СУЗ. В интерфейсе СУЗ предусмотрено разделение на «Устройства». Рассмотрим, как это использовать:
Для каждой отдельной информационной системы (например, основная 1С:ERP на складе и мобильное приложение для инвентаризации) можно создать свое «Устройство» в личном кабинете. Каждому такому устройству присваивается свой статический ClientToken. Это позволяет разграничить потоки заказов и избежать конфликтов при одновременной работе.
Проанализируем правильный алгоритм работы с токеном в коде 1С. Основная ошибка — полагаться только на проверку даты истечения токена, сохраненной в базе данных. Выясним, почему это ненадежно: токен может быть отозван сервером раньше времени из-за технических работ или сбоев.
Рекомендуемый подход заключается в проверке «жизнеспособности» токена через попытку выполнения легкого запроса. Рассмотрим пример функции, которая проверяет авторизацию и обновляет токен при необходимости:
Функция ПолучитьДействующийТокен(Сертификат, ПараметрыПодключения)
ТокенИзБазы = ПолучитьСохраненныйТокен(Сертификат);
// 1. Проверяем формальный срок годности
Если ТокенИзБазы.ДатаИстечения > ТекущаяДата() Тогда
// 2. Делаем тестовый запрос к профилю (проверка валидности)
Ответ = ВыполнитьЗапросКГИСМТ("/api/v3/true-api/profile", "GET", ТокенИзБазы.Значение);
Если Ответ.КодСостояния = 200 Тогда
Возврат ТокенИзБазы.Значение;
ИначеЕсли Ответ.КодСостояния = 401 Тогда
// Токен "протух" раньше времени, нужно обновлять
Лог.Добавить("Сессия недействительна, инициируем обновление...");
КонецЕсли;
КонецЕсли;
// 3. Если дошли сюда, получаем новый токен
НовыйТокен = АвторизоватьсяВЦРПТ(Сертификат, ПараметрыПодключения);
СохранитьТокенВБазу(Сертификат, НовыйТокен);
Возврат НовыйТокен;
КонецФункции
Для обеспечения стабильной работы при использовании нескольких ЭЦП одновременно, придерживайтесь следующих правил:
Пауза (через ПодключитьОбработчикОжидания или циклы с проверкой времени) перед повторной попыткой получения токена.Подведем итог: работа с несколькими токенами одновременно не только возможна, но и является штатным режимом работы ГИС МТ. Главное — правильно идентифицировать каждого пользователя и обеспечить корректную обработку ошибок авторизации (HTTP 401) в программном коде, не ограничиваясь простой проверкой времени жизни токена.