При интеграции 1С с корпоративными порталами, личными кабинетами или сайтами часто возникает задача заменить типовой диалог авторизации платформы на собственную веб-форму. Пользователь должен ввести учетные данные на сторонней веб-странице, после чего должен запуститься полнофункциональный сеанс веб-клиента без повторного запроса логина и пароля. Рассмотрим подробнее, как работает этот механизм, разберем типовые ошибки при формировании запроса и проанализируем нюансы безопасности.
Типовая попытка передать учетные данные через параметры адресной строки в формате GET (например, ?N=Пользователь&P=Пароль) не решает задачу надежно. В современных версиях платформы передача паролей в открытом URL заблокирована в целях безопасности. Кроме того, такой URL сохраняется в истории браузера и журналах веб-сервера.
Штатный механизм платформы «1С:Предприятие 8.3» предусматривает запуск веб-клиента с помощью отправки HTML-формы методом POST на внутреннюю точку входа e1cib/start. Если отправить запрос на корневой адрес публикации базы данных без указания e1cib/start, платформа проигнорирует переданные параметры формы и выведет стандартное модальное окно авторизации.
Разберем по шагам структуру простейшей HTML-страницы, которая передает параметры в 1С:
<form action="https://myserver.ru/mybase/ru_RU/e1cib/start" method="post">
<label for="usr">Пользователь:</label>
<input type="text" id="usr" name="usr" required>
<label for="pwd">Пароль:</label>
<input type="password" id="pwd" name="pwd">
<input type="submit" value="Войти в систему">
</form>
Посмотрим на параметры, принимаемые точкой входа платформы:
action — полный URL опубликованной базы данных с обязательным добавлением суффикса e1cib/start. Если необходимо запустить интерфейс на конкретном языке, в путь включается код локализации, например /ru_RU/e1cib/start.usr — имя пользователя информационной базы (соответствует имени пользователя в конфигураторе или в справочнике пользователей).pwd — пароль пользователя в открытом виде (шифрование обеспечивается протоколом HTTPS на транспортном уровне).Если в информационной базе используется разделение данных (облачный режим работы или сервис аренды), для входа в нужную область необходимо передавать номер области данных. В платформе 1С за это отвечает параметр zone.
Разберем практическую задачу: когда номер области данных пользователя совпадает с его логином. Чтобы пользователю не приходилось заполнять два одинаковых поля, значение можно автоматически дублировать с помощью простого JavaScript-обработчика, скрыв поле области из видимости.
<form id="authForm" action="https://myserver.ru/mybase/ru_RU/e1cib/start" method="post">
<label for="usr">Логин:</label>
<input type="text" id="usr" name="usr" oninput="document.getElementById('zone').value = this.value;" required>
<label for="pwd">Пароль:</label>
<input type="password" id="pwd" name="pwd">
<input type="hidden" id="zone" name="zone" value="">
<input type="submit" value="Войти">
</form>
Платформа также поддерживает передачу вспомогательных сервисных параметров через поля формы:
CnnPrf — режим низкой скорости соединения (принимает значение Low).OvrPrf — параметр запуска конфигурации (соответствует ключу /C запуска толстого или тонкого клиента).L — код языка интерфейса (например, ru или en).VL — код локализации сеанса.Главный недостаток прямой отправки формы на e1cib/start заключается в том, что в случае ввода неверного логина или пароля платформа перенаправляет пользователя на стандартное окно ошибки или интерфейс ввода учетных данных 1С. Если требуется оставить пользователя в рамках дизайна внешнего сайта и вывести сообщение о неверном пароле, разработчики используют предварительную проверку через собственный HTTP-сервис.
Проанализируем архитектуру этого решения:
ПользователиИнформационнойБазы либо вызовы специализированных функций Библиотеки стандартных подсистем (БСП).e1cib/start.Пример генерации автоматического перехода на стороне клиента при успешной валидации:
<form id="redirectForm" action="https://myserver.ru/mybase/ru_RU/e1cib/start" method="post">
<input type="hidden" name="usr" value="ИванИванов">
<input type="hidden" name="pwd" value="SecretPass123">
</form>
<script>
document.getElementById("redirectForm").submit();
</script>
Важное архитектурное ограничение: HTTP-сервис 1С работает в изолированном серверном сеансе. Он не может «превратить» свой сеанс в пользовательский веб-клиент. Веб-клиент всегда инициирует отдельную сессию браузера со своим набором сессионных cookie платформы.
При реализации сквозного входа через форму необходимо учитывать следующие требования безопасности и сетевые правила:
site.ru), а публикация 1С — на другом домене или поддомене (например, 1c.site.ru), браузеры со строгими политиками безопасности могут заблокировать сохранение сессионных cookie платформы при кросс-доменном POST-запросе. Рекомендуется размещать форму авторизации и публикацию веб-клиента в рамках одного источника либо настраивать проксирование через Nginx/Apache.<iframe> на сайте, сеанс может быть заблокирован механизмом защиты от кликджекинга. По умолчанию веб-серверы 1С выставляют заголовок X-Frame-Options: SAMEORIGIN. Для встраивания во внешний портал необходимо скорректировать заголовки ответа веб-сервера.Для промышленных систем ручная передача логинов и паролей через скрытые HTML-формы считается устаревшим подходом. Наиболее безопасным и поддерживаемым способом является настройка аутентификации через протокол OpenID или OpenID Connect:
default.vrd настраивается тег <openid>, связывающий 1С с сервером авторизации.default.vrd атрибут enableStandardAuthentication устанавливается в значение false. Это полностью отключает встроенное окно ввода логина и пароля платформы.