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

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

Часто при работе с типовыми конфигурациями на базе Библиотеки стандартных подсистем (БСП) возникает вопрос о повышении безопасности доступа. Одним из самых надежных способов является двухфакторная аутентификация (2FA). Однако, при поиске в настройках пользователя, стандартных опций для ее включения не находится. Давайте разберемся, есть ли эта возможность в типовых решениях, и как ее правильно настроить.

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

Принцип работы механизма 2FA в платформе 1С

Процесс двухфакторной аутентификации разделен на два этапа:

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

В качестве провайдера может выступать практически любой сервис, имеющий API:

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

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

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

Далее мы рассмотрим наиболее распространенный сценарий с «простым» провайдером.

Пошаговая настройка 2FA программным способом

Настройка выполняется программно с использованием встроенного языка 1С и состоит из трех основных шагов. Рассмотрим каждый из них подробно.

Шаг 1. Активация опции для пользователя

Это единственный шаг, который частично выполняется в пользовательском интерфейсе. Для того чтобы у пользователя при входе запрашивался второй фактор, необходимо в его карточке (справочник Пользователи) установить флаг «Аутентификация токеном доступа». Этот флаг становится доступным только в том случае, если для пользователя уже создана персональная настройка второго фактора (см. Шаг 3).

Шаг 2. Создание шаблона настроек провайдера

На этом этапе мы должны описать, как 1С будет взаимодействовать с нашим внешним сервисом (например, SMS-шлюзом). Для этого используется объект ШаблонНастроекВторогоФактораАутентификации. Этот шаблон создается один раз для каждого провайдера и затем может использоваться для всех пользователей.

В шаблоне мы указываем адрес сервиса, метод HTTP-запроса, заголовки и параметры. Платформа предоставляет специальные плейсхолдеры, которые будут заменены реальными данными в момент отправки запроса: {ТекстСообщения}, {ПараметрыАутентификации} и другие.

Посмотрим на пример создания шаблона для отправки SMS через сервис SMS.ru. Предположим, что для отправки сообщения сервис требует GET-запрос на определенный URL с параметрами: `api_id` (ваш ключ API), `to` (номер телефона) и `msg` (текст сообщения).


// Создаем новый шаблон для провайдера
ШаблонПровайдера = ШаблоныНастроекВторогоФактораАутентификации.СоздатьШаблон();
ШаблонПровайдера.Имя = "Провайдер через SMS.RU";

// Указываем тип провайдера - простой (1С сама генерирует код)
ШаблонПровайдера.ТипПровайдера = ТипПровайдераВторогоФактораАутентификации.Простой;

// Формируем URL для запроса. 
// Вместо {ПараметрыАутентификации} подставится номер телефона пользователя.
// Вместо {ТекстСообщения} - сгенерированный текст с кодом.
// ВАЖНО: Храните api_id в безопасном месте, например, в константах, а не в коде.
СтрокаURL = "https://sms.ru/sms/send?api_id=ВАШ_API_КЛЮЧ"
          + "&to={ПараметрыАутентификации}"
          + "&msg={ТекстСообщения}"
          + "&json=1"; // Добавляем параметр для получения ответа в формате JSON

ШаблонПровайдера.СтрокаURL = СтрокаURL;

// Указываем, что нужно использовать HTTP-метод GET
ШаблонПровайдера.HTTPМетод = "GET";

// Текст сообщения, который будет отправлен пользователю. 
// Плейсхолдер {КодДоступа} будет заменен на сгенерированный 1С код.
ШаблонПровайдера.ШаблонТекстаСообщения = "Ваш код для входа в 1С: {КодДоступа}";

// Сохраняем шаблон
ШаблонПровайдера.Записать();

// Сохраним ссылку на созданный шаблон для следующего шага
СсылкаНаШаблон = ШаблонПровайдера.Ссылка;

Важный момент: ключ API (`api_id`) нельзя хранить прямо в коде. Лучше вынести его в защищенное хранилище или в константу, доступную только администраторам системы.

Шаг 3. Создание персональной настройки для пользователя

Теперь, когда у нас есть шаблон взаимодействия с провайдером, нужно связать его с конкретным пользователем и указать его контактные данные. Для этого используется объект НастройкаВторогоФактораАутентификации.

Эта настройка создается для каждого пользователя, для которого мы хотим включить 2FA. В ней мы указываем ссылку на пользователя, ссылку на созданный ранее шаблон и параметры аутентификации (в нашем случае — номер телефона).

Продолжим наш пример:


// Получаем ссылку на пользователя, для которого настраиваем 2FA
ПользовательИБ = Справочники.Пользователи.НайтиПоНаименованию("Иванов И.И.");
Если НЕ ЗначениеЗаполнено(ПользовательИБ.Ссылка) Тогда
    Сообщить("Пользователь не найден!");
    Возврат;
КонецЕсли;

// Получаем ссылку на шаблон, созданный на шаге 2
// Здесь СсылкаНаШаблон - это переменная, в которую мы сохранили ссылку после записи шаблона
Если НЕ ЗначениеЗаполнено(СсылкаНаШаблон) Тогда
    Сообщить("Шаблон провайдера не найден!");
    Возврат;
КонецЕсли;

// Создаем персональную настройку
Настройка2FA = МенеджерНастроекВторогоФактораАутентификации.СоздатьНастройку();
Настройка2FA.Пользователь = ПользовательИБ.Ссылка;
Настройка2FA.Шаблон = СсылкаНаШаблон;

// В "ПараметрыАутентификации" записываем номер телефона в формате,
// который ожидает наш провайдер. Это значение подставится в {ПараметрыАутентификации} в URL.
Настройка2FA.ПараметрыАутентификации = "79991234567"; 

// Представление - это то, как контакт будет отображаться в интерфейсе (например, в логах)
Настройка2FA.Представление = "+7 (999) 123-45-67";

// Записываем настройку
Настройка2FA.Записать();

После выполнения этого кода для пользователя «Иванов И.И.» будет создана настройка 2FA. Теперь можно зайти в его карточку и установить флаг «Аутентификация токеном доступа». При следующем входе в систему, после ввода логина и пароля, платформа отправит SMS с кодом на указанный номер телефона и отобразит поле для его ввода.

Таким образом, мы видим, что, несмотря на отсутствие готового графического интерфейса, платформа «1С:Предприятие» предоставляет разработчикам гибкий и мощный инструмент для интеграции двухфакторной аутентификации. С помощью объектов ШаблонНастроекВторогоФактораАутентификации и НастройкаВторогоФактораАутентификации можно легко настроить взаимодействие с любым внешним сервисом, значительно повысив уровень безопасности информационной базы.

← На главную