1С: Неверный токен JWT при аутентификации через OpenID (Invalid Signature / Token Expired)
Структура токена JSON Web Token (JWT) и причины отклонения платформой 1С
При завершении аутентификации OpenID Connect провайдер (IdP) передает платформе 1С подписанный ID Token в формате JSON Web Token (RFC 7519), состоящий из трех частей, разделенных точками: Header.Payload.Signature. Платформа 1С выполняет криптографическую валидацию токена. Ошибка «Неверный токен JWT» (Invalid JWT Token / Signature Verification Failed / Token Expired) генерируется в следующих случаях:
- Сбой подписи (Signature Mismatch): Токен подписан приватным ключом, публичная пара которого отсутствует в эндпоинте
jwks_uri. - Истечение срока действия (Expired,
exp): Текущее время сервера 1С опережает временную меткуexpв payload токена. - Несоответствие аудитории (Audience,
aud) или издателя (Issuer,iss): Значениеissв токене не совпадает в точности (байт-в-байт) с URL провайдера вdefault.vrd.
Бизнес-риски
Отказ в обслуживании доверенных пользователей, невозможность интеграции с корпоративными SSO-порталами, сбои при обработке API-запросов внешних мобильных клиентов.
Регламент валидации и исправления ошибок JWT в 1С
Сценарий 1: Проверка и декодирование JWT-токена в консоли
Для выявления некорректных клеймов перехватите и декодируйте входящий токен:
# Декодирование полезной нагрузки JWT через Python / CLI
python3 -c '
import sys, json, base64
token = sys.argv[1]
payload = token.split(".")[1]
# Коррекция base64 padding
payload += "=" * ((4 - len(payload) % 4) % 4)
print(json.dumps(json.loads(base64.b64decode(payload)), indent=2))
' "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTAwMDAwMDB9..."Сценарий 2: Анализ полей токена и устранение расхождений
Проверьте соответствие полей спецификации 1С:
iss(Issuer): Должен совпадать с URL вdefault.vrd(например,https://idp.corp.local/realms/master). Ошибка в наличии или отсутствии закрывающего слэша/ломает строгую проверку строк!aud(Audience): Обязан содержать значениеclientId, сконфигурированное в 1С. В Keycloak настройте Client Scope $\rightarrow$ Audience Mapper.expиnbf: Проверьте синхронизацию часов сервера 1С и сервера IdP с точностью до секунды через NTP (chrony).
Сценарий 3: Настройка алгоритма подписи в Identity Provider (RS256 vs HS256)
Платформа 1С ожидает подпись токена асимметричным алгоритмом RS256 (RSA Signature with SHA-256) или ES256:
- В настройках клиента Keycloak перейдите в Fine Grain OpenID Connect Configuration.
- Убедитесь, что параметр ID Token Signature Algorithm установлен в
RS256(симметричный алгоритмHS256платформой 1С не поддерживается для OIDC Discovery).
Типовые ошибки администраторов
- Рассинхронизация времени серверов на несколько секунд: Если время на сервере 1С спешит на 5 секунд относительно IdP, токен считается «еще не наступившим» (
nbf / Not Before error). - Ротация ключей JWKS без очистки кэша 1С: При смене ключей на стороне Keycloak сервер 1С кэширует старый набор ключей. Требуется перезапуск рабочего процесса
rphostили пула веб-сервера.
Специалисты ITSTM настроят точную трансляцию claims, Audience Mappers в Keycloak и обеспечат надежную криптографическую валидацию токенов.
Частые вопросы (FAQ)
Где сервер 1С берет публичные ключи для проверки подписи JWT?
Сервер 1С автоматически скачивает набор публичных ключей по адресу jwks_uri, указанному в документе .well-known/openid-configuration провайдера.
Что делать, если в токене отсутствует поле preferred_username?
В настройках мапперов клиента IdP добавьте User Property Mapper: Property = username, Token Claim Name = preferred_username, включите флаги Add to ID token и Add to access token.
Поддерживает ли 1С токены доступа в формате непрозрачных строк (Opaque Tokens)?
Нет, для аутентификации 1С требует строго валидный самодостаточный токен в формате JWT (JSON Web Token).
Как влияет параметр Token Expiration на активные сеансы пользователей в 1С?
Токен JWT проверяется только в момент инициализации пользовательского сеанса. После создания сеанса 1С поддерживает собственную сессионную куку.