Начиная с версии платформы «1С:Предприятие 8.3.26», разработчикам и администраторам стал доступен механизм тонкого управления элементами интерактивной формы аутентификации через файл публикации веб-сервера default.vrd. Нередко возникает задача полностью отключить стандартный диалог ввода логина и пароля, оставив доступ к информационной базе исключительно по токенам доступа JWT (JSON Web Token). Однако при такой настройке можно столкнуться с ситуацией, когда веб-клиент или тонкий клиент выдает ошибку о том, что для базы «запрещены любые соединения». Разберем по шагам, как устроена аутентификация по токенам, почему возникает подобное поведение платформы и как правильно организовать работу.
Проанализируем структуру секции <authentication> в конфигурационном файле публикации default.vrd. Важно понимать разграничение между отображением интерактивной формы входа и фоновой валидацией токенов доступа:
<logonView> отвечает исключительно за визуальные элементы интерактивной формы аутентификации, которая открывается пользователю в браузере или тонком клиенте.type тега <method> поддерживаются только интерактивные способы входа:
standard — стандартная аутентификация системы «1С:Предприятие» (логин и пароль);email — аутентификация по ссылке/коду через электронную почту;openID — вход через провайдер OpenID;openidconnect — вход через OpenID Connect;qr — аутентификация с помощью QR-кода.<logonView> не существует, поскольку передача токена происходит в фоновом режиме (через параметры командной строки, URL-параметры или HTTP-заголовки) без участия интерактивной формы выбора учетной записи.Рассмотрим пример конфигурации default.vrd, в которой скрывается стандартная форма логина и пароля:
<authentication>
<logonView>
<method type="standard" visible="false"/>
</logonView>
<accessTokenAuthentication>
<issuers>
<issuer name="https://auth.company.local"
authenticationClaimName="sub"
authenticationUserPropertyName="name"
keyInformation="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz..."/>
</issuers>
</accessTokenAuthentication>
</authentication>
Выясним причину, по которой база данных при отключении стандартной формы входа начинает полностью блокировать пользователей. Алгоритм обработки входящего подключения платформой «1С:Предприятие» работает следующим образом:
AccessToken строки URL или заголовке Authorization: Bearer).exp) и цифровую подпись с использованием ключа из keyInformation.authenticationClaimName (например, sub или email), и ищет соответствующего пользователя в информационной базе по свойству, указанному в authenticationUserPropertyName (name, OSUser или email).default.vrd для метода standard установлено значение visible="false" (а другие интерактивные методы не настроены), платформа обнаруживает, что ни один интерактивный способ входа не разрешен, и возвращает общее критическое предупреждение: «Запрещены любые соединения с базой 1С».Разберем практические шаги, которые необходимо выполнить для устранения ошибки и корректной настройки входа по JWT:
Откроем информационную базу в режиме «Конфигуратор», перейдем в меню Администрирование -> Пользователи. В свойствах пользователя убедимся, что установлен флаг «Аутентификация токеном доступа» (или проверим программную установку свойства ПользовательИнформационнойБазы.АутентификацияТокеномДоступа = Истина).
Проанализируем состав payload токена и настройки в default.vrd. Если в параметре authenticationUserPropertyName указано значение name, то значение клейма sub должно символ в символ (включая регистр и специальные символы) совпадать с системным реквизитом «Имя» (а не «Полное имя»!) пользователя ИБ.
Из соображений безопасности платформа не сообщает клиенту точную причину отказа. Откроем Журнал регистрации в рабочей базе и установим отбор по событию Сеанс.Аутентификация или Сеанс.Ошибка аутентификации. В тексте события будет указана точная причина: Токен доступа: не найден пользователь, Срок действия токена истек либо Неверная подпись токена.
Для локализации проблемы временно включим стандартную форму входа, установив <method type="standard" visible="true"/>. Если при переходе по ссылке с токеном открывается форма ввода логина и пароля вместо автоматического входа — сопоставление пользователя или проверка токена гарантированно терпит неудачу.
Рассмотрим, как правильно передавать полученный JWT-токен в зависимости от используемого типа клиента:
https://server.domain.ru/base_name/?AccessToken=eyJhbGciOiJSUzI1NiIsInR5cCI6...
1cv8c.exe ENTERPRISE /IBConnectionString "ws='https://server.domain.ru/base_name';" /AccessToken "eyJhbGciOiJSUzI1Ni..."
Authorization: Bearer eyJhbGciOiJSUzI1Ni...
Таким образом, ограничение интерактивного входа через logonView является полностью рабочим механизмом, но требует строгой точности в сопоставлении учетных данных и правильной обработки ошибок валидации токенов на стороне платформы.