Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

JWT expired 1С:Предприятие и СУБД

1С: Ошибка JWT токена An error occurred while attempting to decode the JWT expired

Обновлено: 10.09.2026 · Официальная документация ↗

Архитектура JWT (JSON Web Token) в интеграциях 1С

Ошибка «An error occurred while attempting to decode the JWT expired» возникает, когда 1С (в роли клиента или сервера) пытается валидировать JWT-токен при работе с HTTP-сервисами, но время жизни токена истекло. JWT-токен содержит секцию Payload с параметром exp (Expiration Time — время истечения в формате Unix Timestamp). Ядро 1С строго сверяет это время с локальным временем сервера (rphost). Бизнес-риски: остановка обмена заказами с интернет-магазином (Wildberries, Ozon), отказ авторизации мобильного приложения в центральной базе 1С.

Структура JWT токена и валидация 1С

Секция токенаПараметрПричина сбоя при валидации в 1С
Headeralg (Алгоритм)Неподдерживаемый алгоритм подписи (например, 1С не поддерживает экзотические эллиптические кривые без внешних компонент).
Payload (Полезная нагрузка)exp (Expiration)Время сервера 1С больше, чем время exp в токене. Токен протух.
SignatureСекретный ключ (Secret)Неверный сертификат или пароль при декодировании ТокенДоступа.ПроверитьПодпись().

Методы решения проблем с валидацией токенов (OAuth 2.0)

Сценарий 1: Рассинхронизация времени (Time Drift)

Самая частая причина. Внешний сервис выдал токен на 5 минут, но на сервере 1С (Windows/Linux) время спешит на 6 минут. Для 1С токен уже протух в момент получения.

 Проверка и синхронизация времени на Linux сервере 1С (PostgreSQL/rphost)
timedatectl status
sudo chronyc tracking
sudo chronyc makestep  -- Принудительная синхронизация с NTP

Сценарий 2: Реализация механизма Refresh Token в 1С

Если токен реально протух, код 1С должен уметь обработать ошибку HTTP 401 и запросить новый токен (Refresh).

 // Пример обработки 401 Unauthorized
HTTPОтвет = HTTPСоединение.ВызватьHTTPМетод("GET", HTTPЗапрос);

Если HTTPОтвет.КодСостояния = 401 Тогда
    // Токен Expired. Вызываем функцию обновления
    НовыйТокен = ОбновитьJWTТокен(ТекущийRefreshТокен);
    HTTPЗапрос.Заголовки.Вставить("Authorization", "Bearer " + НовыйТокен);
    // Повторяем запрос
    HTTPОтвет = HTTPСоединение.ВызватьHTTPМетод("GET", HTTPЗапрос);
КонецЕсли;

Сценарий 3: Игнорирование проверки Expired при отладке

Если вы парсите JWT вручную в 1С, вы можете отключить строгую проверку времени (Только для тестов!).

 // Декодирование токена средствами платформы 8.3.21+
Токен = ТокенДоступа.Прочитать(СтрокаJWT);

 // Для ручного парсинга (Base64) - извлечение Payload
МассивЧастей = СтрРазделить(СтрокаJWT, ".");
JSONPayload = ПолучитьСтрокуИзБуфераДвоичныхДанных(Base64Значение(МассивЧастей[1]));

Типовые ошибки разработчиков

  • Хранение токенов в константах 1С: Запись JWT токена в Константу без механизма автообновления гарантирует отказ интеграции ровно через час (стандартный TTL токена). Токены нужно хранить в Регистре Сведений с меткой времени exp.
  • Часовой пояс (Timezone): 1С работает с локальным временем сеанса, а JWT всегда использует UTC (Unix Time). При сравнении дат необходимо использовать функцию УниверсальноеВремя(), иначе сдвиг на +3 часа (МСК) сделает все токены невалидными.
API маркетплейсов отваливается каждую неделю из-за проблем с авторизацией?
Внедрение стабильного шлюза API требует экспертных знаний протоколов OAuth 2.0 / OpenID Connect. Разработчики ITSTM спроектируют отказоустойчивую архитектуру обмена 1С с Kafka, REST API и сервисами Госуслуг (ЕСИА).
💡 Практика специалистов: Практика ITSTM: При построении микросервисной архитектуры вокруг 1С мы рекомендуем развертывать локальный Keycloak (Identity Provider). 1С будет общаться с Keycloak, который возьмет на себя всю головную боль по ротации токенов, кэшированию ключей JWKS и синхронизации времени.

Частые вопросы (FAQ)

Как в 1С получить время истечения (exp) из JWT токена?

Раскодируйте вторую часть токена (Payload) из Base64. В полученном JSON найдите поле 'exp'. Это число секунд, прошедших с 1 января 1970 года (Unix Epoch). Чтобы получить дату 1С: Дата1С = '19700101000000' + ЗначениеExp;

Почему платформа 8.3.21+ выдает ошибку при чтении нормального токена?

Объект ТокенДоступа в новых версиях 1С выполняет строгую криптографическую валидацию по стандарту RFC 7519. Если подпись не сходится с открытым ключом провайдера (JWKS), платформа выбросит исключение.

Что такое Refresh Token и зачем он нужен?

Access Token (JWT) живет недолго (15-60 минут) для безопасности. Refresh Token живет долго (месяцы). Когда Access Token протухает (Expired), 1С отправляет Refresh Token на сервер авторизации, чтобы получить новую пару токенов без ввода логина/пароля.

Можно ли отключить проверку времени на боевом сервере?

Категорически нельзя. Игнорирование 'exp' (Expiration Time) открывает уязвимость Replay Attack. Злоумышленник, перехвативший старый токен, сможет использовать его бесконечно для доступа к вашим данным.

Полезные материалы
Рекомендуем