Настройка аутентификации OpenID connect используя Keykloack при подключении к 1С

22.10.21

Администрирование - Информационная безопасность

В статье опишу порядок настройки, проверки и направления изучения по теме "Технология единого входа (англ. Single Sign-On), SSO".

Вводные

  • Сервер 1С 8.3.18, проверил на локальном win, на nix в планах
  • Нужно сделать аутентификацию клиентов через единый, независимый от рабочей базы 1С сервис

 

Варианты решения

1. OpenID, https://v8.1c.ru/platforma/openid-autentifikatsiya/, в качестве сервиса аутентификации выделяется отдельная база 1С. настройка сводится к дополнению публикации базы по HTTP, описана в //infostart.ru/1c/articles/1170720/ и настройкой HTTPS для базы с ролью "провайдер OpenID". Устарел, переиспользовать для других сервисов проблематично, на замену ему пришел OpenID connect.

2. OpenID connect https://openid.net/connect/, "is a simple identity layer on top of the OAuth 2.0 protocol" (является простым уровнем идентификации поверх протокола OAuth 2.0). Настраивается на уровне HTTP публикации клиента.

Описание настроек со стороны публикации 1С https://its.1c.ru/db/v8313doc#bookmark:adm:TI000000845, тоже самое на английском (немного урезано) https://support.1ci.com/hc/en-us/sections/360005970179-3-18-9-openidconnect-

Общее описание взаимодействия (в разделе фреш, но думаю подход к локальной платформе схож) https://its.1c.ru/db/fresh#content:19956766:1:issogl1_h1e1l9ae

Общее описание на англ https://1c-dn.com/anticrisis/tips-and-guidelines/how-do-i-configure-openid-connect-authentication/description_OpenID_Connect_authentication/

В разделе ИТС есть примеры настройки для использования с Google, Azure и ЕСИА, https://its.1c.ru/db/metod8dev/content/5972/hdoc .

Статья по использованию сервиса Okta в качестве сервера идентификации //infostart.ru/1c/articles/1435248/.

 

Все решения используют публичные сервисы, мне интересно запустить в локальном контуре. В качестве сервера идентификации использовал Keykloack https://www.keycloak.org/, потому что по нему есть базовая информация на русском языке, например обзор использования от X5, в том числе по использованию в связке с gatekeeper (тема следующей статьи). По ORY Hydra https://www.ory.sh/hydra/ только на англ. Так же следует отметить что все эти сервисы заточены под "cloud native", использование в средах VM и bare metal вызывает трудности.

Схема

 

 

Управление VM и подобие service discovery описал в статье //infostart.ru/1c/articles/1531329/

 

Настройка Keycloack

Keycloack написан на java, для тестов развернул через docker образ с внутренней базой H2, для разворачивания рабочей версии нужно разобраться с настройками. Как на уровне Keycloack указать имя возвращаемого хоста не разобрался поэтому проксирование не настраивал, использую типовой порт 8080. Для запуска образа использую podman https://podman.io/ "Podman – это демон-контейнерный движок для разработки, управления и запуска OCI-контейнеров в вашей системе Linux."

 
 Скрипт установки

Источник https://techviewleo.com/install-keycloak-server-on-ubuntu-using-podman/

В результате имею сервис доступный по адресу http://auth.malikov.lan:8080/auth/

Настройки в админ панели

Добавляю realm "onec_openid" (независимое пространство со своими юзерами, группами, ролями, ключами, страницами авторизации и клиентами.)

В realm "onec_openid" добавляю клиент (client) "onec_client" с Client Protocol = openid_connect

 
 Скриншот настройки
  1. Тип доступа public
  2. Активность Implict Flow
  3. Адрес возврата до win сервера
  4. Адрес возврата до nix сервера
  5. Разрешение CORS между точками доступа

В realm "onec_openid" добавляю пользователя (users) "user", добавляю email "user@malikov.lan" и пароль через вкладку "credentials".

 

Настройка на стороне 1С

Использую пустую конфигурацию, в ней добавляю Роль "ПолныеПрава". В каждую из баз добавляю пользователя с именем "user@malikov.lan" с правами ПолныеПрава

Конфиг на локальном сервере

 
 default.vrd

 

На сервере nix

 
 default.vrd

 

Вместо "providerconfig" можно использовать "discovery" и ссылку на ".well-known", но у меня не заработало.

В "clientconfig/scope" указан "id_token token" потому что используется Implicit Flow, с 8.3.20 возможно будет использовать более безопасный "Authorization Code Flow"

По умолчанию в качестве сопоставления для ИмяПользователя берется email, "authenticationClaimName": "email", но можно взять и имя пользователя (preferred_username).

Проверка работоспособности

Тонкий клиент

 
 Скриншоты

 

Недостаток, не сохраняет внутри себя токены (каждый раз нужно вводить логин и пароль)

Google Chrome

Сразу перенаправляет на страницу аутентификации

 
 Скриншот

 

Либо показывает окно выбора варианта

 
 Скриншот

 

При успешной аутентификаци загружается рабочее место 1С

 

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

 
 Скриншот

 

Общее

При использовании стандартной темы валится список ошибок подключения шрифтов, возможно решается параметрами установки или настройки

 
 скриншот

 

Проверку на подделку JWT не делал, тема отдельного блока тестов.

 

Итог

На данный момент возможно собрать локальную систему с центральной точкой входа по HTTP и переиспользовать её в других сервисах организации. Думаю возможно её дополнить связью OIDC c доменом.

Непонятен порядок работы 1С с refresh_token, т.к. по умолчанию в keykloack они короткоживущие.

Не добавлял параметр для Sign out, разберусь, дополню статью, пользовательская страница для моего окружения http://auth.malikov.lan:8080/auth/realms/onec_openid/account/#/

 

Благодарю за внимание.

См. также

AUTO VPN (portable)

Информационная безопасность Платные (руб)

Автоматизация подключения пользователей к удаленному рабочему месту или сети посредством создания автоматического VPN (L2TP или L2TP/IPSEC и т.д.) подключения без ввода настроек пользователем (с возможностью скрытия этих настроек от пользователя). Программа автоматически выполняет подключение к VPN серверу и после успешного коннекта , если необходимо, подключение к серверу удаленных рабочих столов (RDP).

1200 руб.

24.03.2020    14394    22    32    

33

Настройка аутентификации в 1С с использованием стандарта RFC 7519 (JWT)

Информационная безопасность Платформа 1С v8.3 Бесплатно (free)

Рассмотрим в статье более подробную и последовательную настройку аутентификации в 1С с использованием распространенной технологии JWT, которая пришла в программу в платформе версии 8.3.21.1302.

27.02.2024    2582    PROSTO-1C    9    

29

Device flow аутентификация, или туда и обратно

Информационная безопасность Платформа 1С v8.3 Абонемент ($m)

Интеграционные решения стали неотъемлемой частью нашей жизни. Правилом хорошего тона в современных приложениях является не давать интегратору доступ к чувствительным данным. Device flow позволяет аутентифицировать пользователя, не показывая приложению чувствительные данные (например: логин и пароль)<br> Рассмотрим Device flow аутентификацию, в приложении, на примере OpenID провайдера Yandex.

1 стартмани

27.10.2023    1615    platonov.e    1    

23

Анализатор безопасности базы сервера 1С

Информационная безопасность Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

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

5 стартмани

24.04.2023    5437    14    soulner    7    

29

Двухфакторная аутентификация в 1С через Telegram и Email

Информационная безопасность Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

1С, начиная с версии платформы 8.3.21, добавили в систему возможность двойной аутентификации. Как это работает: в пользователе информационной базы появилось свойство «Аутентификация токеном доступа» (АутентификацияТокеномДоступа во встроенном языке), если установить этот признак и осуществить ряд манипуляций на встроенном языке, то появляется возможность при аутентификации отправлять HTTP запросы, которые и реализуют этот самый второй фактор. Данное расширение позволяет организовать двухфакторную аутентификацию с помощью электронной почты или мессенджера Telegram.

2 стартмани

08.12.2022    5962    32    Silenser    12    

23

История одного взлома или проверьте вашу систему на безопасность

Информационная безопасность Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

От клиента клиенту, от одной системы к другой, мы вновь и вновь встречаем одни и те же проблемы и дыры в безопасности. На конференции Infostart Event 2021 Post-Apocalypse Виталий Онянов рассказал о базовых принципах безопасности информационных систем и представил чек-лист, с помощью которого вы сможете проверить свою систему на уязвимость.

26.10.2022    9241    Tavalik    46    

113
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. user1694116 05.11.21 18:49 Сейчас в теме
Как можно с вами связаться?
2. user1234318 25.03.22 07:20 Сейчас в теме
Здравствуйте.

Пытаемся реализовать подобную схему на apache24x64win + keycloak +ActiveDirectory, авторизация openid проходит, но в журнале регистрации сообщения ошибки авторизации, в поле "Текущий пользователь ОС" подставляет пользователя от которого запущена служба apache.

Можете подсказать у вас изменненная конфигурация apache или это проблема модуля 1С?

Используем платформу 8.3.20.1674

Используем следующие параметры конфигурации:

"authenticationClaimName": "preferred_username",
"authenticationUserPropertyName": "OSUser",
3. malikov_pro 1292 25.03.22 09:30 Сейчас в теме
(2)
Добрый день.
"Текущий пользователь ОС" - логично, пользователь из под которого работает служба, нужен "просто пользователь", возможно неправ, нужно поднимать стек и смотреть.

Используем платформу 8.3.20.1674 - на сколько помню делал в связке с OKTA (студенту помогал) - работало, на Oauth0 не работало, при этом кеш аутентификации в тонком клиенте сохранялся.

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

"authenticationUserPropertyName": "OSUser" - вроде поле от auth сервера с пользователем другое.
4. user1234318 25.03.22 09:57 Сейчас в теме
Настройку для authenticationUserPropertyName брал по информации с итс.




https://its.1c.ru/db/v8320doc#bookmark:adm:TI000000847

authenticationClaimName ‑ определяет, какое поле JSON-файла (JSON Web Token, JWT) с результатами аутентификации должно использоваться в качестве идентификатора для сопоставления пользователя информационной базы и пользователя провайдера OpenID Connect. Если не указано ‑ используется поле с электронной почтой.

● authenticationUserPropertyName‑ определяет, какое поле в настройках пользователя информационной базы используется для сравнения с идентификатором пользователя, который передается провайдером OpenID Connect. Допускается указанием следующих значений:

● name ‑ имя пользователя (свойство Имя объекта ПользовательИнформационнойБазы).

● OSUser ‑ имя пользователя операционной системы (свойство ПользовательОС объекта ПользовательИнформационнойБазы).
5. user1234318 25.03.22 10:09 Сейчас в теме
Исправил конфигурацию authenticationUserPropertyName на значение name, и вроде заработало. еще посмотрим. спасибо.
6. Kuryshev 18.04.22 18:30 Сейчас в теме
Подскажите, удалось ли при запуске тонкого клиента сохранять токены, чтобы каждый раз не вводить логин и пароль?
7. malikov_pro 1292 18.04.22 19:38 Сейчас в теме
(6) на Keykloack нет, при подключении к Oauth0 кешировалось (хотя сама аутентификация не проходила), предположу то нужен определенный формат файла ответа. Путем сравнения с форматом от Oauth0 и правкой конфига думаю можно достичь кеширования, описания в документации 1С не видел.
8. malikov_pro 1292 19.04.22 07:05 Сейчас в теме
9. kv.lv 10 05.10.22 14:41 Сейчас в теме
как потом этот токен использовать в http сервисе?

{base}}/hs/test/getinfo

c авторизацией bearer token и зоголовком Authorization Bearer {ТОКЕН}

авторизация не доступна. веб клиент работает а http сервис нет.
где может быть причина?
10. malikov_pro 1292 05.10.22 19:31 Сейчас в теме
(9) Предположу что HTTP сервисы не поддерживают bearer аутентификацию, в документации поддержка не заявлена. Как вариант делать аутентификацию кодом.
11. YA_744959768 30.10.22 22:42 Сейчас в теме
Во-первых позвольте выразить признательность за труд и полезную информацию :)
Во-вторых, чуть добавлю от себя данных, вдруг кто-то как я будет тупить :)
- в базе 1С имя пользователя должно быть адресом электронной почты, вот тут написано: https://its.1c.ru/db/v8313doc#bookmark:adm:TI000000850 при других раскладах у меня не взлетело. Так же не завелось пока не поставил галку Аутентикаця Open ID Connect в конфигураторе
- на стороне KC в контейнере нужно настраивать проксю, там специальная опция есть, тут вот написано: https://www.keycloak.org/server/hostname , но я настраивал bare metal на виртуалке, однако все равно поимел любви некоторое количество :)

Еще раз спасибо за статью, сам бы имел любовь с этим сильно дольше
12. seregasame 22.11.22 15:58 Сейчас в теме
Добрый день, у кого нибудь получилось настроить в режиме Authorization Code Flow? Implicit flow работает, но не подходит, на кейклок его не хотят включать. Платформа 21
13. malikov_pro 1292 23.11.22 05:39 Сейчас в теме
(12) "на кейклок его не хотят включать." - на внешнем сервисе?
Если в локальном то через:
https://www.keycloak.org/docs/latest/securing_apps/#_javascript_implicit_flow

На сколько понимаю Authorization Code Flow платформой не поддерживается, если не прав то дайте ссылку на документацию.
15. seregasame 23.11.22 10:10 Сейчас в теме
(13)
На сколько понимаю Authorization Code Flow платформой не поддерживается, если не прав то дайте ссылку на документацию.
+

https://its.1c.ru/db/v8322doc#bookmark:adm:TI000000847
тут написано что response_type может иметь вид:
1: code ‑ используется Authorization Code Flow.
2: id_token или id_token token ‑ используется Implicit Flow.

написал на линию консультации 1С, жду что скажут

keycloak на стороне заказчика и им администрируется
14. malikov_pro 1292 23.11.22 05:43 Сейчас в теме
(11) в базе 1С имя пользователя должно быть адресом электронной почты - определяется свойством authenticationUserPropertyName, по умолчанию email

"на стороне KC в контейнере нужно настраивать проксю," - на сколько понимаю больше вопрос в прописывании доменного имени сервера аутентификации, буду разворачивать - проверю
16. malikov_pro 1292 23.11.22 10:16 Сейчас в теме
(15) при Authorization Code Flow нигде не описан формат взаимодействия с сервером аутентификации. И при Implicit Flow требуемый формат JWT, точнее его тела не описан, поэтому при работе с keycloack (с настройками по умолчанию) логин не кешируется в тонком клиенте, а при работе с auth0 кушируется. Копать и экспериментировать, когда дойду до этого вопроса на своем предприятии не знаю, поэтому сейчас отвечаю из своего общего представления.
17. Ксакеп 63 16.02.23 18:32 Сейчас в теме
Доброго времени суток.
Прошу совета.

Настроил авторизую, как описано в статье.
При попытке залогиниться Keycloak сообщает следующее:
"We are sorry...
Invalid parameter: redirect_uri".

Настройки редиректа в консоли Keycloak и в default.vrd идентичны: адрес веб публикации базы + "authform.html".

Подскажите, куда рыть в этой ситуации?
18. Gakuseii 1 22.03.23 09:30 Сейчас в теме
(17)
посмотреть что указано в консоли кейклоака для данного клиента в поле valid_redirect_urls и сравнить с тем, что передается в адресной строке браузера клиента для начала
19. Ксакеп 63 27.03.23 14:16 Сейчас в теме
(18)
как оказалось, текст ошибки не имеет ничего общего с проблемой.
Но за участие спасибо )
20. user1946390 11.05.23 07:43 Сейчас в теме
Доброго времени суток.
Пробую связку 1С с Keycloak+https-portal. В общем, в связке с outline wiki Keycloak работает, а вот с 1С незадача: заходим в веб-браузере на страницу входа в базу, переходим на аутентификацию KC, вводим логин+пароль, жмем вход и выходит 502 ошибка от https-portal. Кто-нибудь знает, в чем проблема? Также в режиме тонкого клиента вообще не открывается аутентификация а просто бесконечно крутятся желтые точки.
21. ivisakhit 12.05.23 01:50 Сейчас в теме
Доброго времени суток.
Пробую связку 1С с Keycloak + https-portal. В общем, в связке с outline wiki Keycloak работает, а вот с 1С незадача: заходим в веб-браузере на страницу входа в базу, переходим на аутентификацию KC, вводим логин+пароль, жмем вход, и выходит 502 ошибка. Кто-нибудь знает, в чем проблема? Также в режиме тонкого клиента вообще не открывается аутентификация, а просто бесконечно крутятся желтые точки.
22. localhostik 15.05.23 14:27 Сейчас в теме
Присоединяюсь к вопросам выше.
Все работает пока не появляется (а она появляется очень быстро) необходимость в https.
Ошибка 502 после аутентификации.

Upd.

Решается настройкой proxy

proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
ivisakhit; +1 Ответить
23. ivisakhit 19.05.23 08:13 Сейчас в теме
(22)Благодарю за решение. Теперь в браузере открывается. Правда, через тонкий клиент всё же не работает. Сначала очень долго моргают желтые точки по кругу, после чего появляется запрос аутентификации в KC. После логина снова долгие точки, после чего ошибка: "Не удалось выполнить OpenID Connect аутентификацию. Проверьте правильность настроек подключения. Невозможно установить сеанс пользователя".
24. user1808757 10.08.23 15:31 Сейчас в теме
Всем привет, настроил openid connect с ADFS все замечательно работает, но вот незадача. работает пока браузер не закроешь, нигде не могу найти параметр жизни сеанса. В OpenID это:
<openid>
<provider>
<lifetime>86400</lifetime>
</provider>
</openid>

а как с OpenID Connect? (((
25. Sedaiko 572 26.01.24 01:51 Сейчас в теме
Вместо "providerconfig" можно использовать "discovery" и ссылку на ".well-known", но у меня не заработало.

Обнаружил, что discovery срабатывает, если адрес без порта (80 или 443). У меня через nginx завелся.
Но еще одна проблема - если при работе через тонкий клиент идет выдача лицензий не сервером, то авторизация не проходит
Оставьте свое сообщение