Как реализовать альтернативный вход, регистрацию и восстановление пароля в 1С:Предприятии?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При публикации баз 1С в интернете (например, для личного кабинета клиентов, дилеров или внешних сотрудников) разработчики часто сталкиваются с необходимостью сделать интерфейс входа дружелюбным и современным. Стандартное окно авторизации 1С не позволяет пользователю самостоятельно зарегистрироваться, сбросить забытый пароль или пройти проверку по SMS.

В этой статье мы подробно разберем, как решить задачу альтернативного входа и саморегистрации в системе 1С:Предприятие 8. Мы рассмотрим как штатные механизмы современных версий платформы, так и обходные архитектурные пути, включая интеграцию с внешними сервисами и создание специализированных гостевых сессий.

---

Метод 1. Штатное восстановление паролей на уровне платформы (начиная с 8.3.15)

Если ваша главная задача — избавить администратора от рутинных запросов «я забыл пароль», и при этом вас устраивает стандартное окно входа 1С, вам не нужно писать сложный код. Начиная с релиза платформы 8.3.15.2107, этот функционал поддерживается штатно.

Проанализируем, как настроить этот механизм по шагам:

  1. Настройка системной почты: Откроем базу в режиме Конфигуратора или перейдем в административные настройки БСП (Библиотеки Стандартных Подсистем) в режиме 1С:Предприятие. В меню Администрирование — Дополнительные настройки аутентификации необходимо указать параметры вашего SMTP-сервера, с которого будут отправляться письма пользователям.
  2. Подготовка карточек пользователей: В списке пользователей ИБ для каждого человека должен быть заполнен актуальный e-mail. Также убедимся, что в свойствах пользователя снят флаг «Пользователю запрещено восстанавливать пароль».
  3. Как это видит пользователь: При открытии базы (в тонком или веб-клиенте) под полями ввода логина и пароля автоматически появится гиперссылка «Забыли пароль?». При нажатии на нее система попросит ввести e-mail или логин. На указанную почту придет одноразовый код подтверждения, после ввода которого пользователь сможет задать себе новый пароль.

Этот способ идеален для закрытых корпоративных систем, но не решает задачу свободной регистрации новых клиентов «с улицы».

---

Метод 2. Схема «Гостевого входа» с блокирующей формой внутри 1С

Если логику авторизации и регистрации необходимо реализовать исключительно средствами самой 1С (без использования сторонних сайтов), мы можем применить архитектуру гостевого сеанса с перехватом запуска системы. Выясним, как это работает.

Суть метода заключается в том, что мы создаем в базе одного служебного пользователя с минимальными правами (например, с именем Guest) и настраиваем автоматический вход под ним при открытии веб-ссылки.

Разберем реализацию по шагам:

Шаг 1. Настройка автоматического входа гостя

В файле публикации базы default.vrd на веб-сервере (IIS или Apache) мы прописываем параметры авторизации по умолчанию для этого пользователя:


<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       base="/MyBase"
       ib="File=&quot;C:\DB\MyBase&quot;;Usr=&quot;Guest&quot;;Pwd=&quot;GuestPass&quot;;">
</point>

Теперь любой пользователь, открывающий ссылку базы в браузере, будет автоматически авторизован под учетной записью Guest, не видя стандартного окна авторизации.

Шаг 2. Блокировка интерфейса и открытие формы входа

В модуле управляемого приложения перехватим событие старта системы. Если запущен сеанс пользователя Guest, мы должны полностью скрыть основной интерфейс программы и открыть нашу кастомную форму (например, форму обработки «АльтернативныйВход»).

Рассмотрим пример кода в модуле управляемого приложения:


Процедура ПриНачалеРаботыСистемы()
    
    #Если МобильныйКлиент Или ВебКлиент Или ТонкийКлиент Тогда
        
        ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
        Если ТекущийПользовательИБ.Имя = "Guest" Тогда
            
            // Открываем кастомную форму авторизации модально или в режиме блокировки всего интерфейса
            ПараметрыФормы = Новый Структура;
            ОткрытьФорму("Обработка.АльтернативныйВход.Форма.ФормаВхода", ПараметрыФормы, , Истина);
            
        КонецЕсли;
        
    #КонецЕсли;
    
КонецПроцедуры

Шаг 3. Разработка формы авторизации

На созданной управляемой форме мы можем разместить любые элементы управления:

Поскольку сеанс под пользователем Guest уже активен, код на сервере может выполнять любые проверки. Для записи нового пользователя или сверки паролей мы можем использовать привилегированные общие модули, так как у самого гостя прав на изменение справочника пользователей быть не должно.

Шаг 4. Переключение на реального пользователя

Сменить пользователя «на лету» внутри одного активного сеанса платформы 1С невозможно. Поэтому после успешной проверки учетных данных или завершения регистрации нам нужно перезапустить сеанс уже с правами реального пользователя.

Для этого мы генерируем в базе одноразовый временный токен авторизации для данного пользователя, записываем его в специальный регистр сведений со сроком жизни 1-2 минуты, а затем выполняем перезапуск веб-клиента с передачей этого токена в параметрах URL:


&НаКлиенте
Процедура ПослеУспешнойАвторизации(ТокенВхода)
    
    // Формируем URL для перезапуска с токеном
    АдресПодключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
        "https://myserver.ru/MyBase/?auth=%1", 
        ТокенВхода
    );
    
    // Завершаем текущий гостевой сеанс и перенаправляем браузер
    ПерейтиПоНавигационнойСсылке(АдресПодключения);
    
КонецПроцедуры

В модуле управляемого приложения при старте мы анализируем параметры запуска. Если передан параметр auth, мы сопоставляем токен, авторизуем реального пользователя и продолжаем нормальную работу системы.

---

Метод 3. Использование внешней веб-страницы (Landing Page) + HTTP-сервисы 1С

Предыдущий метод имеет один недостаток: «тяжелый» веб-клиент 1С начинает загружаться в браузере еще до того, как пользователь подтвердил свою личность. Это создает нагрузку на сервер лицензирования и веб-сервер.

Более элегантным и профессиональным решением является вынос интерфейса авторизации на легкую статическую HTML-страницу.

Рассмотрим архитектуру этого решения:

  1. На вашем веб-сервере (где опубликована база) рядом с папкой публикации 1С размещается простая HTML-страница (например, login.html), стилизованная под ваш бренд. На ней создаются формы авторизации, регистрации и восстановления паролей с использованием HTML/CSS.
  2. В конфигурации 1С создается **HTTP-сервис** (например, AuthService) с шаблонами URL для обработки запросов login, register, restore.
  3. В файле default.vrd для этого конкретного HTTP-сервиса настраивается беспарольный доступ под служебным пользователем 1С, чтобы внешняя веб-страница могла свободно отправлять ему AJAX-запросы.
  4. Пользователь заполняет форму на странице login.html. Скрипт на JavaScript отправляет POST-запрос на ваш HTTP-сервис в 1С.
  5. 1С принимает запрос, проверяет логин и хеш пароля. Если данные верны, 1С создает сессионный токен и возвращает его в ответе.
  6. JavaScript-код на веб-странице принимает успешный ответ и делает перенаправление браузера на веб-клиент 1С, передавая токен авторизации в строке URL. Платформа впускает пользователя в основной интерфейс.

Посмотрим на пример кода 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");
    
    Возврат Ответ;
    
КонецФункции

---

Метод 4. Интеграция по протоколу OpenID Connect (OIDC)

Если вам требуется промышленное решение корпоративного уровня с поддержкой Multi-Factor Authentication (MFA), входом через социальные сети или мессенджеры (Telegram, VK), лучшим выбором станет интеграция 1С с внешним провайдером идентификации (Identity Provider).

В качестве провайдера можно использовать бесплатные опенсорсные решения (например, Keycloak, Authentik) или облачные сервисы аутентификации.

Проанализируем схему работы по протоколу OpenID:

Настройка интеграции выполняется в файле публикации default.vrd путем добавления секции openidConnect, в которой прописываются адреса авторизационных эндпоинтов вашего провайдера.

---

Резюме и рекомендации

Выбор конкретного метода зависит от масштаба вашей задачи и требований к безопасности:

← На главную