2FA для 1С по протоколу OpenID Connect на базе Keycloak

Очередной пост о том, что мы делаем. В этот раз расскажу вам о том, как мы обеспечили  безопасность информационных баз 1С с использованием сервиса аутентификации Keycloak через протокол OpenID Connect и настройку двухфакторной аутентификации с помощью OTP-кода.

Немного о задаче и почему выбрали Keycloak?

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

Было необходимо предложить реализацию, которая:

Решили использовать сервис аутентификации, который взаимодействует с 1С по протоколу OpenID Connect. Как вариант максимально соответствующий предъявленным требованиям. На ИТС в инструкции «Совместное использование провайдеров маркеров доступа учетных данных и платформы 1С:Предприятие» упоминались следующие провайдеры: Azure AD, AD FS, Google, ЕСИА и Keycloak.

При всём «богатстве выбора» в качестве провайдера аутентификации решено было использовать решение на базе Keycloak. Во-первых, Keycloak продукт с открытым кодом для реализации single sign-on, во-вторых, в нём существует возможность управления доступом, в-третьих, продукт сфокусирован на современных приложениях и сервисах. Кроме того, Keycloak «из коробки» предлагает возможность использования в качестве второго фактора OTP-код и поддерживает работу со следующими приложениями:

Как настраивали Keycloak?

Для авторизации пользователей 1С создали сервер Keycloak. Чтобы хранить данные сервиса, создали один кластер Yandex Managed Service for PostgreSQL.

Настройка Keycloak включала следующие этапы:

Как настроили 1С?

Для настройки 1С мы выполнили следующие шаги:

  1. Установили и запустили серверы приложений 1С и серверы веб-публикации 1С согласно документации.

  2. Создали и опубликовали информационные базы 1С, согласно официальной документации.

  3. Настроили параметры подключения к Keycloak для каждой информационной базы 1С в файле default.vrd, указав адрес, идентификатор и секрет клиента, созданного в Keycloak.

  4. Настроили параметры пользователей 1С, указав тип аутентификации (OpenID Connect) и адрес электронной почты в качестве имени пользователя.

Как работает решение?

После настройки Keycloak и 1С получили такой процесс авторизации пользователей 1С:

  1. Пользователь подключается тонким клиентом 1С к информационной базе на веб‑сервере.

  2. Перенаправляется на страницу входа Keycloak.

  3. Вводит имя и пароль. Если пользователь входит впервые, ему предлагается выполнить смену пароля.

  4. Перенаправляется на страницу подтверждения f2a, где он должен ввести OTP‑код, полученный в OTP‑приложении на мобильном устройстве. Если пользователь входит впервые, ему предлагается привязать новое устройство с приложением для генерации OTP‑кода.

  5. Вводит OTP‑код и нажимает кнопку «Подтвердить».

  6. Тонкий клиент 1С получает (незаметно для пользователя) access token от Keycloak, который содержит информацию о его идентификации.

  7. Перенаправляется обратно в информационную базу 1С, к которой он хочет получить доступ, и передает свой маркер доступа.

  8. Сервер 1С проверяет подлинность и валидность токена, используя ключи и конечные точки, предоставленные Keycloak.

  9. Сервер 1С сопоставляет имя пользователя из маркера доступа с именем пользователя в базе 1С и предоставляет пользователю доступ к ней в соответствии с его правами.

  10. Пользователь может работать с базой 1С пока его токен не истечет или не будет отозван.

Преимущества решения

Особенности

Решение проблемы с клиентскими лицензиями 1С при аутентификации через OpenID Connect

При реализации столкнулись с проблемой: если в кластере 1С отсутствуют клиентские лицензии, при попытке авторизации через OpenID Connect возникает ошибка «Невозможно установить сеанс пользователя». Это происходит даже если клиентская лицензия установлена локально и для подключения используется тонкий клиент 1С.

Заказчик использует следующую схему размещения лицензий:

Серверная лицензия 1С размещена на сервере лицензирования, который является выделенным сервером в кластере с сервисом лицензирования. Клиентские лицензии на сервере лицензирования отсутствуют. Клиентские лицензии 1С установлены локально на рабочих местах пользователей.

Пользователи подключаются к информационным базам, опубликованным на веб‑сервере (ws=»https://server/ib»), используя тонкий клиент. При использовании типа «Аутентификация 1С:Предприятия» проблем с подключением не возникало, а на сервере успешно создавались сессии пользователей с клиентской лицензией. При попытке аутентификации через OpenID Connect возникает ошибка «Невозможно установить сеанс пользователя», так как сервер не мог отыскать лицензию.

Мы обратились в поддержку 1С и, как я уже упоминал, проблема была зарегистрирована как ошибка (https://bugboard.v8.1c.ru/error/000 151 413). Временное решение — использовать достаточное количество клиентских лицензий на сервере и в кластере 1С.

Эта ситуация подчеркивает важность наличия клиентских лицензий на сервере для успешной аутентификации через OpenID Connect и может служить уроком для других компаний, сталкивающихся с подобными задачами.

Заключение

Надеемся, что наш опыт будет полезен коллегам, если они столкнутся с подобной задачей в своих проектах, а потенциальные клиенты узнали достаточно о наших способностях и компетенциях в интеграции систем 2FA. Если у вас остались вопросы или вы готовы дополнить материал, мы будем рады вашей обратной связи в комментах.

@Mi_sha256
13.03.2024 15:34 UTC
Первоисточник

Комментарии

@Vovan3000
10.04.2024 18:10 UTC
0

привет.

я правильно понимаю?

чтобы это заработало на 1С - УЖЕ должны быть пользователи?

нельзя через КейКлоак организовать регистрацию нового пользователя1С ?

@NZakh61
26.02.2025 10:53 UTC
0

Нет, кейклок всего лишь прослойка безопасности, пользователей он берет из базы 1С или в зависимости, что прикрутили.

@abryazgin
14.05.2025 06:00 UTC
0

Добрый день.

Можете уточнить, у вас пользователи входят через тонкий клиент или через браузер? Столкнулись с тем, что при входе через тонкий клиент окно авторизации от кейклока не показывается (ошибка встроенного в 1с браузера). Если в тонком клиенте работает, можете подсказать версии 1с и кейклоака?

@nnstepan
24.09.2025 07:05 UTC
0

Аналогичная ситуация в тонком клиенте под Linux на свежих платформах. На старых - 8.3.24 всё прекрасно работало.

24.09.2025 07:36 UTC
0

Добрый день. Для расследования ситуации рекомендовали создать обработку с ПолеHTML документа и обращаться к публикации второго фактора. Дальше в отладке этого поля внутри 1С смотреть в чем ошибка отображения окна ввода второго фактора.

Детали ниже.

В браузере, для отображения формы логина, используются возможности браузера. Сам браузер у вас, скорее всего, последней версии и может работать, например, с новыми возможностями javascript. В платформе 1с, для отображения формы логина, используются возможности самой платформы. И, в этом случае, возможности будут отличаться от браузера. Получить подробности о месте возникновения проблемы можно в Web Inspector, запущенном из поля HTML документа.

Отладку лучше делать в самом поле HTML, учитывая, что для него используется достаточно древний Webkit, который уже не поддерживается многими библиотеками. Для этого нужно установить фокус на поле и нажать Ctrl + Shift + Alt + F12 (иногда нужно нажать дважды).

@nnstepan
24.09.2025 07:04 UTC
0

А в тонком клиенте под Linux у вас работает эта схема на новых платформах 8.3.27? У меня ничего не отображается и войти невозможно.

@bassoon48
18.10.2025 14:38 UTC
0

.

@bassoon48
18.10.2025 14:52 UTC
0

8.3.27.1786

наконец то починили редиректы сломанные в браузере. Теперь после keycloak СРАЗУ перекидывает в базу данных в браузере.

Раньше надо было открывать вкладку и закрыть.

Это хорошо не прошло и года (год как раз и прошёл).

Теперь следующая проблема.

Как уже сказали выше: если выбрать тонкий клиент и прописать https://domain.ru/baza1c то будет белое окно без всяких ошибок.

Должно кидать в keycloak.

Что, ждём ещё год когда исправите?

@Mi_sha256
28.10.2025 10:42 UTC
0

Коллеги, мы в том же положении, ожидаем пока вендор (дорогой наш 1С) исправит эту ошибку.
Мы будем признательны если вы проголосуете за её решение
https://bugboard.1c.ru/?state=prj-plt8gen-er-70123389 /
Смею надеяться, что это ускорит процесс.

@theguyfromwallstreet
08.06.2026 21:44 UTC
0

Добрый день. Подскажите, удалось вам что-то узнать про подключение через тонкий клиент? пытаюсь настроить через доменную аутентификацию + 1с + keycloak + 2fa. У меня выходит белая форма, поле логин и пароль, ввожу данные и в 1С в журнале регистрации показывается имя пустое. Хотя при тех же самых настройках через web в браузере всё работает отлично с пуш уведомлением на 2fa и вход по домену в 1С. Спасибо за ответ.