Двухфакторная аутентификация (2FA) в 1С «из коробки»: полностью автономная реализация TOTP и генерации QR-кодов на чистом встроенном языке
Администрирование - Информационная безопасность
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Рано или поздно перед разработчиком встает задача дополнительной защиты учетных записей пользователей (особенно для веб-клиентов или баз, смотрящих наружу). Стандартный подход с отправкой SMS требует постоянных затрат на шлюзы, а отправка кодов на Email не всегда оперативна. Самый надежный и бесплатный мировой стандарт — TOTP (Time-Based One-Time Password), используемый в Google Authenticator.
В данной публикации представлено полностью автономное, безопасное и кроссплатформенное решение, написанное целиком на встроенном языке 1С. Оно не зависит от операционной системы сервера, не выполняет вызовы командной строки ОС и не отправляет секретные ключи на внешние веб-сайты для генерации QR-кодов. Все вычисления происходят прямо в памяти 1С.
Как это устроено: Основные вехи алгоритма
Реализация алгоритма внутри прикрепленной обработки разбита на три логических шага:
-
Криптостойкая генерация ключей: Создание случайных секретов в формате Base32 средствами встроенного
ГенератораСлучайныхЧиселплатформы и эффективной побитовой логики (без использования тяжелых строковых манипуляций). -
Чистый расчет HMAC-SHA1: Математический расчет хэша на встроенном языке 1С. Для преобразования хэш-строк в байты задействованы объекты
ПотокВПамятииЗаписьДанных, а сама логика HMAC построена на платформенных функцияхПобитовоеИ(),ПобитовоеИЛИ()иПобитовоеИсключительноеИЛИ(). -
Защита от рассинхронизации (Дрейф времени): Мобильный телефон пользователя и сервер 1С могут иметь небольшое расхождение в часах. Метод проверки в обработке учитывает временной дрейф и валидирует не только текущий 30-секундный интервал, но и соседние ($\pm 30$ секунд), сводя ложные отказы к нулю.
-
Стабильная генерация QR-кода: Метод интеграции со стандартной компонентой 1С
QRCodeExtension(из макетов БСП) переписан под безопасный вызов функцииGenerateQRCode(...). Это полностью решает проблему критических вылетов сеанса 1С (APPCRASH), которые часто происходят при попытке напрямую установить свойстваШиринаилиУровеньКоррекцииОшибоку NativeAPI-компонент.
Архитектура интеграции в вашу систему
В прикрепленном файле обработки вы найдете готовые экспортные функции, которые можно перенести в любой общий модуль. Интеграция в логику конфигурации выглядит следующим образом:
-
При привязке 2FA в профиле: Вызывается функция генерации ключа Base32, результат сохраняется в карточке пользователя (например, в скрытом реквизите справочника Пользователи). На основании этого ключа генерируется табличный документ с QR-кодом для сканирования смартфоном.
-
При авторизации в системе: После ввода основного пароля пользователю показывается дополнительное поле для 6 цифр из приложения. Введенный код передается в функцию валидации вместе с сохраненным секретом из базы данных. Если функция возвращает
Истина— сессия открывается.
Полный программный код со всеми вспомогательными математическими функциями кодирования, потоковой работы с бинарными данными и безопасного вызова внешней компоненты подробно закомментирован и доступен для скачивания в составе внешней обработки.
Инструкция по внедрению 2FA (TOTP) в систему
1. Подготовка
Перенесите функции из обработки в отдельный серверный модуль (например, БезопасностьСервер). Убедитесь, что модуль имеет флаг «Сервер» и «ВызовСервера».
2. Хранение секретов
В справочник Пользователи (или ПользователиИнформационнойБазы) добавьте строковый реквизит СекретTOTP (длина 32-64 символа).
Важно: Данные в этом реквизите должны быть доступны только для чтения администраторам или самому пользователю.
3. Настройка профиля пользователя
Создайте форму, в которой пользователь может включить 2FA:
-
Вызовите функцию
СгенерироватьСекретныйКлючBase32(). -
Сохраните результат в реквизит
СекретTOTPпользователя. -
Сгенерируйте QR-код через
ПолучитьQRКодДляАутентификатора(...)и выведите его на форму в поле «Табличный документ».
4. Интеграция в процесс авторизации
После успешной проверки основного пароля 1С, добавьте проверку кода:
Фрагмент кода
// Проверка кода второго фактора при входе
// Параметры:
// СекретTOTP - Строка
// ВведенныйКод - Строка
// Возврат: Булево
Функция ПроверитьКодДоступа(СекретTOTP, ВведенныйКод) Экспорт
Если БезопасностьСервер.ПроверитьКод2FA(Секрет, ВведенныйКод) Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
Требования к среде
-
Платформа: 1С:Предприятие 8.3 8.3.11.2867 и выше (с поддержкой встроенных побитовых операций). Кроссплатформенно (исправно работает на Windows- и Linux-серверах).
-
Компонента: Внутри обработки уже присутствует двоичный макет
КомпонентаПечатиQRКодасо стандартной библиотекой печати штрихкодов от 1С.
Вступайте в нашу телеграмм-группу Инфостарт