Как реализовать альтернативную форму входа в 1С с функцией восстановления пароля

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

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

Ограничения платформы и анализ проблемы

Рассмотрим ситуацию: разработчику необходимо добавить кнопку «Восстановить пароль» прямо на экран входа. Прямое редактирование системного окна невозможно. Некоторые разработчики пытаются использовать функцию Пауза() или бесконечные циклы в попытке остановить выполнение кода до ввода пароля, но это приводит к «замораживанию» всего потока приложения, делая интерактивную работу с формой невозможной. Проанализируем правильные подходы, которые позволяют обойти эти ограничения.

Метод «Гостевого входа» и программный перезапуск

Наиболее распространенный и надежный способ реализации альтернативного входа — использование специального пользователя с ограниченными правами. Проанализируем этот алгоритм пошагово:

  1. Создание технического пользователя: В конфигураторе создадим пользователя, например, LoginUser (без пароля). Назначим ему роль с минимальными правами, позволяющими только запуск тонкого клиента и открытие одной конкретной общей формы.
  2. Настройка автоматического входа: В параметрах запуска или через настройки информационной базы укажем, что по умолчанию система должна пробовать войти под этим пользователем.
  3. Перехват запуска: В модуле управляемого приложения используем обработчик ПриНачалеРаботыСистемы. Если текущий пользователь — наш «гость», мы открываем форму авторизации.

Посмотрим на пример реализации в модуле управляемого приложения:


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

В этой форме мы размещаем поля для ввода реального логина/пароля и кнопку «Восстановить пароль». После того как пользователь ввел корректные данные, нам нужно «перезайти» в систему под его настоящим именем. Для этого используем метод ЗавершитьРаботуСистемы с параметром перезапуска.


// В коде формы после проверки пароля
ПараметрыЗапуска = СтрШаблон("/N""%1"" /P""%2""", ВведенныйЛогин, ВведенныйПароль);
ЗавершитьРаботуСистемы(Ложь, ПараметрыЗапуска);

Реализация блокирующего окна без «зависания» программы

Выясним причину, по которой у многих разработчиков программа «стопорится». Использование циклов ожидания блокирует основной поток интерфейса. Правильный путь — использование свойства РежимОткрытияОкна.БлокироватьВесьИнтерфейс. Это позволяет форме оставаться активной, пользователь может нажимать на кнопки и вводить текст, но при этом он не может получить доступ к командному интерфейсу (меню) программы, пока форма не будет закрыта.

Важный нюанс: если пользователь закроет форму входа крестиком, приложение должно немедленно завершить работу, иначе он окажется в системе под правами «гостевого» пользователя. В обработчике ПриЗакрытии формы входа обязательно добавьте проверку флага успешной авторизации.

Интеграция с Библиотекой стандартных подсистем (БСП)

Если ваша конфигурация построена на базе БСП (версии 3.0 и выше), многие механизмы уже реализованы. Разберем, как использовать штатные возможности для смены пароля. В БСП существует параметр «Потребовать смену пароля при входе». Технически это работает через подписку на событие запуска, которая открывает блокирующую форму СменаПароля.

Для реализации самообслуживания (восстановления) можно программно использовать этот механизм:

  1. Пользователь нажимает «Восстановить» в вашей форме.
  2. Система отправляет код подтверждения.
  3. После ввода верного кода программно устанавливается временный пароль и взводится флаг ПотребоватьСменуПароляПриВходе.
  4. При следующем автоматическом перезапуске БСП сама предложит пользователю задать новый постоянный пароль.

Механизмы восстановления пароля через внешние каналы

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

Пример генерации токена в 1С:


Генератор = Новый ГенераторСлучайныхЧисел;
КодПодтверждения = Формат(Генератор.СлучайноеЧисло(100000, 999999), "ЧГ=0");
// Записываем код в регистр сведений с отметкой времени

Безопасность самописных форм авторизации

При создании альтернативного входа мы берем на себя ответственность за безопасность. Разберем критические моменты, которые необходимо реализовать:

  1. Защита от перебора (Brute-force): В стандартном окне 1С есть задержки после неудачных попыток. В своей форме реализуйте счетчик: после 3 неудачных попыток блокируйте ввод на 30 секунд, после 5 — на 5 минут.
  2. Логирование: Все попытки входа и запросы на восстановление пароля должны фиксироваться в ЖурналРегистрации. Это поможет администратору выявить подозрительную активность.
  3. Ограничение прав гостя: Убедитесь, что роль, назначенная LoginUser, не имеет прав Просмотр ни на один справочник или документ конфигурации.

Использование OpenID Connect для веб-интерфейсов

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

В заключение отметим, что выбор метода зависит от ваших задач. Для простых конфигураций достаточно метода «Гостевого входа» с блокирующим окном, а для корпоративных систем лучше опираться на механизмы БСП или OpenID. Главное — всегда помнить о безопасности и не оставлять «дыр» в правах доступа технического пользователя.

← На главную