Часто возникает потребность отказаться от стандартного окна входа веб-клиента 1С и сделать красивую, кастомизированную форму авторизации прямо на сайте. Более того, во многих задачах требуется реализовать функционал самостоятельной регистрации пользователей и восстановления пароля, как это работает на классических веб-порталах. Разберем по шагам, как правильно спроектировать и реализовать такую систему.
Первое, что мы выясним — стандартную форму авторизации веб-клиента нельзя просто взять и переписать изнутри 1С, так как она генерируется платформой динамически. Мы не подменяем готовое окно 1С, мы создаем внешний независимый веб-ресурс. Это по факту открытие сеанса 1С с авторизацией из вашей собственной формы.
Рассмотрим подробнее схему работы:
Проанализируем базовый способ передачи учетных данных. Самый простой (но наименее безопасный) вариант — передача логина и пароля прямо в строке браузера через GET-запрос. Выглядит это следующим образом:
http://server/base_name/ru_RU/?N=user&P=password
Где server — адрес вашего сервера, base_name — имя опубликованной базы, N — логин, а P — пароль. Однако использовать этот метод в рабочей среде категорически не рекомендуется: пароли сохраняются в истории браузера и логах веб-сервера.
Посмотрим на более правильный подход. Внешний скрипт (например, на PHP) должен формировать скрытый POST-запрос на адрес публикации веб-клиента 1С. Форма на сайте принимает данные, а затем скрипт отправляет POST-запрос с параметрами авторизации и выполняет редирект пользователя в уже запущенный сеанс, минуя стандартное окно.
Если мы хотим, чтобы пользователи регистрировались самостоятельно, нам потребуется написать собственный API на стороне 1С. Рассмотрим, как это сделать через HTTPСервисы.
Разберем по шагам процесс регистрации:
/hs/custom_auth/register).
НовыйПользователь = ПользователиИнформационнойБазы.СоздатьПользователя();
НовыйПользователь.Имя = ДанныеСайта.Логин;
НовыйПользователь.Пароль = СгенерироватьСлучайныйПароль();
НовыйПользователь.ПоказыватьВСпискеВыбора = Ложь;
НовыйПользователь.Записать();
Восстановление пароля реализуется аналогично. Сайт "стучится" в HTTP-сервис 1С, передавая Email. 1С проверяет наличие пользователя, генерирует код подтверждения и, после проверки, программно устанавливает новый пароль.
Проанализируем более современный и безопасный подход, который поддерживается платформой 1С, начиная с версий 8.3.14. Вместо того чтобы писать самописные страницы на PHP и костыли с POST-запросами, лучше использовать стандарт OpenID Connect (OIDC) для сквозной авторизации.
Для этого мы разворачиваем готовый сервер авторизации (Identity Provider), такой как Keycloak или Authentik, и связываем его с 1С через файл публикации default.vrd.
Как это работает для пользователя:
Разберем важные нюансы, о которых нельзя забывать при проектировании.
Многофакторная аутентификация (2FA): Современная платформа 1С поддерживает провайдеры второго фактора. При использовании OIDC или встроенных механизмов 2FA, после ввода пароля появится окно для ввода одноразового кода (из SMS или приложения-аутентификатора).
Экономия лицензий: При использовании HTTP-сервисов для процессов регистрации и восстановления паролей мы экономим лицензии. Вызов HTTP-сервиса — это быстрая транзакция, которая занимает клиентскую лицензию 1С лишь на доли секунды. В отличие от этого, полноценно запущенный через веб-клиент сеанс будет удерживать лицензию все время работы пользователя в базе.
Таким образом, для создания собственного окна авторизации вы можете пойти путем написания своего веб-портала и связки его с 1С через HTTP-сервисы, либо использовать современные провайдеры SSO. Второй вариант предпочтительнее для безопасности и минимизации разработки нестандартного кода.