Часто при работе с типовыми конфигурациями на базе Библиотеки стандартных подсистем (БСП) возникает вопрос о повышении безопасности доступа. Одним из самых надежных способов является двухфакторная аутентификация (2FA). Однако, при поиске в настройках пользователя, стандартных опций для ее включения не находится. Давайте разберемся, есть ли эта возможность в типовых решениях, и как ее правильно настроить.
Проанализируем ситуацию: в платформе «1С:Предприятие», начиная с версии 8.3.15, действительно появился мощный механизм для реализации 2FA. Но в большинстве типовых конфигураций нет готового интерфейса для его настройки «из коробки». Это связано с тем, что система не может заранее знать, какой именно сервис (провайдер) для отправки кодов вы будете использовать: SMS-шлюз, почтовый сервис, бот в мессенджере и т.д. Поэтому настройка требует небольшого программирования, но, как мы увидим, она не является сложной.
Процесс двухфакторной аутентификации разделен на два этапа:
В качестве провайдера может выступать практически любой сервис, имеющий API:
Платформа поддерживает два сценария взаимодействия с провайдерами:
1. «Простой» провайдер. В этом случае 1С сама генерирует секретный код. Задача провайдера — только доставить этот код пользователю. Платформа отправляет провайдеру HTTP-запрос, содержащий контакт пользователя (например, номер телефона) и текст сообщения с кодом. Затем 1С ожидает, когда пользователь введет полученный код в специальное поле.
2. «Умный» провайдер. Такой провайдер умеет самостоятельно генерировать код, отправлять его и проверять правильность ввода. Платформа 1С в этом сценарии лишь отправляет запрос на начало аутентификации и получает от провайдера ответ: «успешно» или «неуспешно».
Далее мы рассмотрим наиболее распространенный сценарий с «простым» провайдером.
Настройка выполняется программно с использованием встроенного языка 1С и состоит из трех основных шагов. Рассмотрим каждый из них подробно.
Это единственный шаг, который частично выполняется в пользовательском интерфейсе. Для того чтобы у пользователя при входе запрашивался второй фактор, необходимо в его карточке (справочник Пользователи) установить флаг «Аутентификация токеном доступа». Этот флаг становится доступным только в том случае, если для пользователя уже создана персональная настройка второго фактора (см. Шаг 3).
На этом этапе мы должны описать, как 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`) нельзя хранить прямо в коде. Лучше вынести его в защищенное хранилище или в константу, доступную только администраторам системы.
Теперь, когда у нас есть шаблон взаимодействия с провайдером, нужно связать его с конкретным пользователем и указать его контактные данные. Для этого используется объект НастройкаВторогоФактораАутентификации.
Эта настройка создается для каждого пользователя, для которого мы хотим включить 2FA. В ней мы указываем ссылку на пользователя, ссылку на созданный ранее шаблон и параметры аутентификации (в нашем случае — номер телефона).
Продолжим наш пример:
// Получаем ссылку на пользователя, для которого настраиваем 2FA
ПользовательИБ = Справочники.Пользователи.НайтиПоНаименованию("Иванов И.И.");
Если НЕ ЗначениеЗаполнено(ПользовательИБ.Ссылка) Тогда
Сообщить("Пользователь не найден!");
Возврат;
КонецЕсли;
// Получаем ссылку на шаблон, созданный на шаге 2
// Здесь СсылкаНаШаблон - это переменная, в которую мы сохранили ссылку после записи шаблона
Если НЕ ЗначениеЗаполнено(СсылкаНаШаблон) Тогда
Сообщить("Шаблон провайдера не найден!");
Возврат;
КонецЕсли;
// Создаем персональную настройку
Настройка2FA = МенеджерНастроекВторогоФактораАутентификации.СоздатьНастройку();
Настройка2FA.Пользователь = ПользовательИБ.Ссылка;
Настройка2FA.Шаблон = СсылкаНаШаблон;
// В "ПараметрыАутентификации" записываем номер телефона в формате,
// который ожидает наш провайдер. Это значение подставится в {ПараметрыАутентификации} в URL.
Настройка2FA.ПараметрыАутентификации = "79991234567";
// Представление - это то, как контакт будет отображаться в интерфейсе (например, в логах)
Настройка2FA.Представление = "+7 (999) 123-45-67";
// Записываем настройку
Настройка2FA.Записать();
После выполнения этого кода для пользователя «Иванов И.И.» будет создана настройка 2FA. Теперь можно зайти в его карточку и установить флаг «Аутентификация токеном доступа». При следующем входе в систему, после ввода логина и пароля, платформа отправит SMS с кодом на указанный номер телефона и отобразит поле для его ввода.
Таким образом, мы видим, что, несмотря на отсутствие готового графического интерфейса, платформа «1С:Предприятие» предоставляет разработчикам гибкий и мощный инструмент для интеграции двухфакторной аутентификации. С помощью объектов ШаблонНастроекВторогоФактораАутентификации и НастройкаВторогоФактораАутентификации можно легко настроить взаимодействие с любым внешним сервисом, значительно повысив уровень безопасности информационной базы.