Стандартное окно аутентификации платформы 1С:Предприятие обладает высокой степенью надежности, однако оно практически не поддается кастомизации. Мы не можем добавить туда дополнительные кнопки, изменить дизайн или внедрить логику самостоятельного восстановления пароля пользователем. В рамках данной статьи мы разберем эффективные методы реализации собственной формы входа, которая позволит расширить возможности взаимодействия с пользователем еще до начала основной работы с системой.
Рассмотрим ситуацию: разработчику необходимо добавить кнопку «Восстановить пароль» прямо на экран входа. Прямое редактирование системного окна невозможно. Некоторые разработчики пытаются использовать функцию Пауза() или бесконечные циклы в попытке остановить выполнение кода до ввода пароля, но это приводит к «замораживанию» всего потока приложения, делая интерактивную работу с формой невозможной. Проанализируем правильные подходы, которые позволяют обойти эти ограничения.
Наиболее распространенный и надежный способ реализации альтернативного входа — использование специального пользователя с ограниченными правами. Проанализируем этот алгоритм пошагово:
LoginUser (без пароля). Назначим ему роль с минимальными правами, позволяющими только запуск тонкого клиента и открытие одной конкретной общей формы.ПриНачалеРаботыСистемы. Если текущий пользователь — наш «гость», мы открываем форму авторизации.Посмотрим на пример реализации в модуле управляемого приложения:
Процедура ПриНачалеРаботыСистемы()
Если ПользователиИнформационнойБазы.ТекущийПользователь().Имя = "LoginUser" Тогда
ПараметрыФормы = Новый Структура;
// Открываем форму в режиме блокировки всего интерфейса
ОткрытьФорму("ОбщаяФорма.ФормаАльтернативногоВхода", ПараметрыФормы, , , , , , РежимОткрытияОкна.БлокироватьВесьИнтерфейс);
КонецЕсли;
КонецПроцедуры
В этой форме мы размещаем поля для ввода реального логина/пароля и кнопку «Восстановить пароль». После того как пользователь ввел корректные данные, нам нужно «перезайти» в систему под его настоящим именем. Для этого используем метод ЗавершитьРаботуСистемы с параметром перезапуска.
// В коде формы после проверки пароля
ПараметрыЗапуска = СтрШаблон("/N""%1"" /P""%2""", ВведенныйЛогин, ВведенныйПароль);
ЗавершитьРаботуСистемы(Ложь, ПараметрыЗапуска);
Выясним причину, по которой у многих разработчиков программа «стопорится». Использование циклов ожидания блокирует основной поток интерфейса. Правильный путь — использование свойства РежимОткрытияОкна.БлокироватьВесьИнтерфейс. Это позволяет форме оставаться активной, пользователь может нажимать на кнопки и вводить текст, но при этом он не может получить доступ к командному интерфейсу (меню) программы, пока форма не будет закрыта.
Важный нюанс: если пользователь закроет форму входа крестиком, приложение должно немедленно завершить работу, иначе он окажется в системе под правами «гостевого» пользователя. В обработчике ПриЗакрытии формы входа обязательно добавьте проверку флага успешной авторизации.
Если ваша конфигурация построена на базе БСП (версии 3.0 и выше), многие механизмы уже реализованы. Разберем, как использовать штатные возможности для смены пароля. В БСП существует параметр «Потребовать смену пароля при входе». Технически это работает через подписку на событие запуска, которая открывает блокирующую форму СменаПароля.
Для реализации самообслуживания (восстановления) можно программно использовать этот механизм:
ПотребоватьСменуПароляПриВходе.Рассмотрим подробнее, как организовать безопасную передачу данных. Поскольку на этапе входа пользователь еще не авторизован полноценно, отправку сообщений должен выполнять серверный код под привилегированным режимом. Проанализируем три основных канала:
ИнтернетПочтовыйПрофиль. Генерируем случайное число (токен), сохраняем его в РегистрСведений с привязкой к пользователю и временем жизни (например, 10 минут) и отправляем на Email, указанный в карточке сотрудника.ChatID к профилю в 1С. При запросе восстановления бот присылает одноразовый пароль.Пример генерации токена в 1С:
Генератор = Новый ГенераторСлучайныхЧисел;
КодПодтверждения = Формат(Генератор.СлучайноеЧисло(100000, 999999), "ЧГ=0");
// Записываем код в регистр сведений с отметкой времени
При создании альтернативного входа мы берем на себя ответственность за безопасность. Разберем критические моменты, которые необходимо реализовать:
ЖурналРегистрации. Это поможет администратору выявить подозрительную активность.LoginUser, не имеет прав Просмотр ни на один справочник или документ конфигурации.Проанализируем более продвинутый вариант, подходящий для крупных систем и веб-клиентов. 1С поддерживает протокол OpenID. В этом случае роль формы входа берет на себя внешний веб-сайт. Преимущество этого метода в том, что вы можете использовать любые современные технологии (CAPTCHA, двухфакторная аутентификация через мобильные приложения, дизайн любой сложности). После успешной авторизации на внешнем ресурсе, сервер выдает токен, по которому 1С «узнает» пользователя и впускает в базу без лишних вопросов.
В заключение отметим, что выбор метода зависит от ваших задач. Для простых конфигураций достаточно метода «Гостевого входа» с блокирующим окном, а для корпоративных систем лучше опираться на механизмы БСП или OpenID. Главное — всегда помнить о безопасности и не оставлять «дыр» в правах доступа технического пользователя.