Вводные
- Сервер 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
- Тип доступа public
- Активность Implict Flow
- Адрес возврата до win сервера
- Адрес возврата до nix сервера
- Разрешение CORS между точками доступа
В realm "onec_openid" добавляю пользователя (users) "user", добавляю email "user@malikov.lan" и пароль через вкладку "credentials".
Настройка на стороне 1С
Использую пустую конфигурацию, в ней добавляю Роль "ПолныеПрава". В каждую из баз добавляю пользователя с именем "user@malikov.lan" с правами ПолныеПрава
Конфиг на локальном сервере
На сервере nix
Вместо "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/#/
Благодарю за внимание.