Как настроить двухфакторную аутентификацию (2FA) в 1С:Предприятие?

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

Обеспечение безопасности корпоративных данных — одна из приоритетных задач любого администратора и разработчика систем на платформе 1С:Предприятие. Начиная с версии 8.3.15, в платформу был встроен стандартный механизм двухфакторной аутентификации (2FA). Этот инструмент позволяет существенно повысить уровень защиты информационных баз, пресекая попытки несанкционированного доступа даже в случае компрометации основного пароля пользователя.

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

Архитектура и основные принципы работы 2FA в 1С

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

  1. Первый фактор: Пользователь вводит свои стандартные имя и пароль в диалоговом окне 1С. Платформа выполняет проверку этих данных.
  2. Второй фактор: Если первый этап пройден успешно, платформа обращается к внешнему веб-сервису (провайдеру аутентификации) посредством HTTP/HTTPS-запроса, отправляя запрос на генерацию или доставку одноразового кода. На стороне клиента открывается окно ввода кода подтверждения.

Важно понимать разницу между двумя поддерживаемыми типами провайдеров:

Как показывает практика и обсуждения разработчиков, наиболее простым в реализации является именно простой провайдер, так как вся логика валидации кода остается на стороне платформы.

Реализация простого провайдера на базе HTTP-сервиса 1С

Рассмотрим ситуацию, когда мы хотим использовать HTTP-сервис, написанный на стороне самой 1С (в этой же или в соседней базе), в качестве шлюза для отправки одноразовых кодов. Схема работы выглядит следующим образом: платформа при авторизации генерирует код, обращается к нашему HTTP-сервису, а наш сервис перенаправляет этот код пользователю (например, через Telegram или корпоративный SMS-шлюз). Для такой задачи подойдёт практический пример реализации провайдера 2FA с отправкой кодов через Telegram.

Для реализации этой схемы нам понадобятся два основных шага: настройка шаблона второго фактора в коде и создание HTTP-сервиса, обрабатывающего запросы платформы.

Разберем по шагам программную настройку шаблона второго фактора аутентификации. Для работы с шаблонами используется объект встроенного языка ШаблоныНастроекВторогоФактораАутентификации.

Пример кода для создания и назначения настроек второму фактору защиты:


// 1. Создаем или находим шаблон настроек 2FA
ШаблонНастройки = ШаблоныНастроекВторогоФактораАутентификации.СоздатьШаблон();
ШаблонНастройки.Наименование = "SMS_Авторизация_Простой";
ШаблонНастройки.ТипПровайдера = ТипПровайдераВторогоФактораАутентификации.Простой;

// Указываем адрес нашего HTTP-сервиса, который будет принимать запросы от платформы
ШаблонНастройки.Адрес = "https://my-server.ru/corp_base/hs/2fa/send";
ШаблонНастройки.МетодHTTPЗапроса = МетодHTTPЗапроса.POST;

// Формируем тело запроса. Платформа автоматически подставит значение кода вместо маркера [secret]
// Также можно передавать имя пользователя через маркер [user]
ШаблонНастройки.ТелоЗапроса = "{""user"": ""[user]"", ""code"": ""[secret]""}";
ШаблонНастройки.Заголовки.Вставить("Content-Type", "application/json");

// Записываем шаблон в базу данных
ШаблоныНастроекВторогоФактораАутентификации.Записать(ШаблонНастройки);

// 2. Назначаем созданные настройки конкретному пользователю информационной базы
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("ИвановИИ");
Если ПользовательИБ <> Неопределено Тогда
    НастройкиПользователя = ПользовательИБ.НастройкиВторогоФактораАутентификации;
    НастройкиПользователя.Использовать = Истина;
    НастройкиПользователя.Шаблон = ШаблонНастройки;
    
    // В данном свойстве можно передать индивидуальные данные (например, телефон пользователя)
    НастройкиПользователя.ДополнительныеПараметрыАдреса = "phone=+79991112233";
    ПользовательИБ.Записать();
КонецЕсли;

Теперь проанализируем структуру HTTP-сервиса, который будет принимать этот запрос. В конфигурации необходимо создать HTTP-сервис с именем 2fa и шаблоном URL send, обрабатывающим метод POST.

Пример кода метода-обработчика в модуле HTTP-сервиса:


Функция ОтправитьКодПодтверждения(Запрос)
    
    // Читаем тело запроса, отправленное платформой 1С
    ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();
    
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(ТелоЗапроса);
    ДанныеЗапроса = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    
    ИмяПользователя = ДанныеЗапроса.user;
    КодПодтверждения = ДанныеЗапроса.code; // Это тот самый "secret", сгенерированный платформой
    
    // Получаем дополнительные параметры (например, номер телефона из URL)
    ПараметрыЗапроса = Запрос.ПараметрыЗапроса;
    НомерТелефона = ПараметрыЗапроса.Получить("phone");
    
    // Здесь должна быть логика отправки SMS или сообщения в мессенджер
    РезультатОтправки = ИнтеграцияСВнешнимиСервисами.ОтправитьSMS(НомерТелефона, "Код подтверждения входа в 1С: " + КодПодтверждения);
    
    Ответ = Новый HTTPСервисОтвет(200);
    Если РезультатОтправки Тогда
        Ответ.УстановитьТелоИзСтроки("{""status"": ""success""}");
    Иначе
        Ответ.УстановитьТелоИзСтроки("{""status"": ""error""}");
        Ответ.КодСостояния = 500;
    КонецЕсли;
    
    Возврат Ответ;
    
КонецФункции

Эволюция механизмов 2FA в новых версиях платформы (до 8.3.28)

Если в ранних версиях платформы (8.3.15–8.3.17) функционал двухфакторной аутентификации содержал ряд жестких ограничений, то к версии 8.3.28 фирма «1С» проделала огромную работу по его улучшению. Рассмотрим ключевые нововведения:

Готовые альтернативные варианты интеграции 2FA

Для тех компаний, которые хотят внедрить двухфакторную аутентификацию оперативно и «без лишних телодвижений» (то есть без самостоятельного программирования HTTP-сервисов и интеграций с провайдерами связи), существуют отличные альтернативные решения:

  1. Облачные сервисы 1С:Фреш: Если ваша база данных развернута в сервисе «1С:Предприятие через Интернет», вы можете включить 2FA в несколько кликов в личном кабинете. Сервис поддерживает отправку кодов по e-mail или генерацию одноразовых кодов (TOTP) через мобильные приложения-аутентификаторы (Google Authenticator, Яндекс Ключ и др.).
  2. Готовые партнерские расширения: Крупные облачные хостинги 1С предоставляют готовые файлы расширений (.cfe), реализующие авторизацию по протоколу TOTP с выводом QR-кода прямо в интерфейсе программы при первой настройке пользователя.
  3. Специализированные сервисы безопасности (например, Мультифактор): Такие провайдеры предоставляют бесплатные готовые модули и плагины для 1С. Интеграция позволяет использовать современные методы аутентификации: Push-уведомления в мобильном приложении, звонки-сбросы или отправку кодов в мессенджеры.
  4. Технология OpenID Connect: Для крупных инфраструктур оптимальным вариантом является делегирование аутентификации внешней корпоративной системе (IdM/FAM-решениям). Платформа 1С поддерживает интеграцию по протоколу OpenID Connect, что позволяет организовать сквозную SSO-авторизацию и многофакторную проверку на уровне всей компании.

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

← На главную