При публикации баз 1С в интернете (например, для личного кабинета клиентов, дилеров или внешних сотрудников) разработчики часто сталкиваются с необходимостью сделать интерфейс входа дружелюбным и современным. Стандартное окно авторизации 1С не позволяет пользователю самостоятельно зарегистрироваться, сбросить забытый пароль или пройти проверку по SMS.
В этой статье мы подробно разберем, как решить задачу альтернативного входа и саморегистрации в системе 1С:Предприятие 8. Мы рассмотрим как штатные механизмы современных версий платформы, так и обходные архитектурные пути, включая интеграцию с внешними сервисами и создание специализированных гостевых сессий.
---
Если ваша главная задача — избавить администратора от рутинных запросов «я забыл пароль», и при этом вас устраивает стандартное окно входа 1С, вам не нужно писать сложный код. Начиная с релиза платформы 8.3.15.2107, этот функционал поддерживается штатно.
Проанализируем, как настроить этот механизм по шагам:
Администрирование — Дополнительные настройки аутентификации необходимо указать параметры вашего SMTP-сервера, с которого будут отправляться письма пользователям.Этот способ идеален для закрытых корпоративных систем, но не решает задачу свободной регистрации новых клиентов «с улицы».
---
Если логику авторизации и регистрации необходимо реализовать исключительно средствами самой 1С (без использования сторонних сайтов), мы можем применить архитектуру гостевого сеанса с перехватом запуска системы. Выясним, как это работает.
Суть метода заключается в том, что мы создаем в базе одного служебного пользователя с минимальными правами (например, с именем Guest) и настраиваем автоматический вход под ним при открытии веб-ссылки.
Разберем реализацию по шагам:
Шаг 1. Настройка автоматического входа гостя
В файле публикации базы default.vrd на веб-сервере (IIS или Apache) мы прописываем параметры авторизации по умолчанию для этого пользователя:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
base="/MyBase"
ib="File="C:\DB\MyBase";Usr="Guest";Pwd="GuestPass";">
</point>
Теперь любой пользователь, открывающий ссылку базы в браузере, будет автоматически авторизован под учетной записью Guest, не видя стандартного окна авторизации.
Шаг 2. Блокировка интерфейса и открытие формы входа
В модуле управляемого приложения перехватим событие старта системы. Если запущен сеанс пользователя Guest, мы должны полностью скрыть основной интерфейс программы и открыть нашу кастомную форму (например, форму обработки «АльтернативныйВход»).
Рассмотрим пример кода в модуле управляемого приложения:
Процедура ПриНачалеРаботыСистемы()
#Если МобильныйКлиент Или ВебКлиент Или ТонкийКлиент Тогда
ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
Если ТекущийПользовательИБ.Имя = "Guest" Тогда
// Открываем кастомную форму авторизации модально или в режиме блокировки всего интерфейса
ПараметрыФормы = Новый Структура;
ОткрытьФорму("Обработка.АльтернативныйВход.Форма.ФормаВхода", ПараметрыФормы, , Истина);
КонецЕсли;
#КонецЕсли;
КонецПроцедуры
Шаг 3. Разработка формы авторизации
На созданной управляемой форме мы можем разместить любые элементы управления:
Поскольку сеанс под пользователем Guest уже активен, код на сервере может выполнять любые проверки. Для записи нового пользователя или сверки паролей мы можем использовать привилегированные общие модули, так как у самого гостя прав на изменение справочника пользователей быть не должно.
Шаг 4. Переключение на реального пользователя
Сменить пользователя «на лету» внутри одного активного сеанса платформы 1С невозможно. Поэтому после успешной проверки учетных данных или завершения регистрации нам нужно перезапустить сеанс уже с правами реального пользователя.
Для этого мы генерируем в базе одноразовый временный токен авторизации для данного пользователя, записываем его в специальный регистр сведений со сроком жизни 1-2 минуты, а затем выполняем перезапуск веб-клиента с передачей этого токена в параметрах URL:
&НаКлиенте
Процедура ПослеУспешнойАвторизации(ТокенВхода)
// Формируем URL для перезапуска с токеном
АдресПодключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"https://myserver.ru/MyBase/?auth=%1",
ТокенВхода
);
// Завершаем текущий гостевой сеанс и перенаправляем браузер
ПерейтиПоНавигационнойСсылке(АдресПодключения);
КонецПроцедуры
В модуле управляемого приложения при старте мы анализируем параметры запуска. Если передан параметр auth, мы сопоставляем токен, авторизуем реального пользователя и продолжаем нормальную работу системы.
---
Предыдущий метод имеет один недостаток: «тяжелый» веб-клиент 1С начинает загружаться в браузере еще до того, как пользователь подтвердил свою личность. Это создает нагрузку на сервер лицензирования и веб-сервер.
Более элегантным и профессиональным решением является вынос интерфейса авторизации на легкую статическую HTML-страницу.
Рассмотрим архитектуру этого решения:
login.html), стилизованная под ваш бренд. На ней создаются формы авторизации, регистрации и восстановления паролей с использованием HTML/CSS.AuthService) с шаблонами URL для обработки запросов login, register, restore.default.vrd для этого конкретного HTTP-сервиса настраивается беспарольный доступ под служебным пользователем 1С, чтобы внешняя веб-страница могла свободно отправлять ему AJAX-запросы.login.html. Скрипт на JavaScript отправляет POST-запрос на ваш HTTP-сервис в 1С.Посмотрим на пример кода HTTP-сервиса 1С, обрабатывающего запрос авторизации:
Функция AuthServiceАвторизоватьПользователя(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку("UTF-8");
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоЗапроса);
ДанныеАвторизации = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Логин = ДанныеАвторизации.login;
ПарольХеш = ДанныеАвторизации.passwordHash;
// Проводим проверку пользователя в справочнике или регистре
НайденныйПользователь = ПроверитьПользователяВБазе(Логин, ПарольХеш);
Если НайденныйПользователь <> Неопределено Тогда
Токен = ГенераторТокенов.СоздатьВременныйТокен(НайденныйПользователь);
СтруктураОтвета = Новый Структура;
СтруктураОтвета.Вставить("status", "success");
СтруктураОтвета.Вставить("token", Токен);
Иначе
СтруктураОтвета = Новый Структура;
СтруктураОтвета.Вставить("status", "error");
СтруктураОтвета.Вставить("message", "Неверный логин или пароль");
КонецЕсли;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураОтвета);
Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть(), "UTF-8");
Возврат Ответ;
КонецФункции
---
Если вам требуется промышленное решение корпоративного уровня с поддержкой Multi-Factor Authentication (MFA), входом через социальные сети или мессенджеры (Telegram, VK), лучшим выбором станет интеграция 1С с внешним провайдером идентификации (Identity Provider).
В качестве провайдера можно использовать бесплатные опенсорсные решения (например, Keycloak, Authentik) или облачные сервисы аутентификации.
Проанализируем схему работы по протоколу OpenID:
Настройка интеграции выполняется в файле публикации default.vrd путем добавления секции openidConnect, в которой прописываются адреса авторизационных эндпоинтов вашего провайдера.
---
Выбор конкретного метода зависит от масштаба вашей задачи и требований к безопасности: