Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

Описание решения

Для поддержки технологии SSO (single sing-on, технология единого входа) в рамках комплекса SoftWLC поддержана возможность интеграции с решением Keycloak (https://www.keycloak.org/), в основе которого используется протокол OAUTH 2.0 (https://oauth.net). Данное решение позволяет отказаться от использования локальных учетных записей (далее УЗ) для аутентификации и авторизации в Eltex-EMS, Личном кабинете (далее ЛК), Конструкторе порталов (далее КП) и eltex-radius-nbi и выполнять ее на основе БД пользователей Keycloak или использовать интеграцию Keycloak с LDAP.

Общая схема аутентификации в ЛК / КП


Drawio
bordertrue
viewerToolbartrue
fitWindowfalse
diagramNamecad-ep-auth-scheme
simpleViewerfalse
diagramWidth858
revision2

AuthCode (authorization code) - временный код, который клиент должен обменять на AccessToken. AuthCode выдается сервером авторизации, на который обращается клиент после его аутентификации. С этим кодом пользователь возвращается на страницу приложения, которое обменивает его на AccessToken.

AccessToken - специальная строка, которую пользователь использует для выполнения запросов к приложению.


Схема процесса авторизации и взаимодействия

...

Image RemovedImage Removed

Установка

Полноценного этапа установки у сервиса нет, в основном старт сервиса заключается в исполнении скрипта или поднятии контейнеров.

...

ЛК/КП с NBI

Drawio
bordertrue
viewerToolbartrue
fitWindowfalse
diagramNamekey-auth-flow
simpleViewerfalse
width
diagramWidth1121
revision12


Общая схема аутентификации и авторизации в EMS

Drawio
bordertrue
viewerToolbartrue
fitWindowfalse
diagramNameems-auth-scheme
simpleViewerfalse
diagramWidth1322
revision4

Подсказка

Для выполнения запросов к NBI EMS использует сервисную УЗ "softwlc_service".


Настройка Keycloak

Сервис Keycloak запускается в docker-контейнере. Подробнее про возможные концепции старта сервиса можно посмотреть здесь в официальной документации к сервису.

...

Минимальные требования к хостовой машине, на которой выполняется запуск контейнера: 4G RAM, 4 CPU,

...

50Gb HDD.

Так же потребуется установить сервис docker и docker-compose.

Запуск сервиса в Docker с помощью Docker compose

Рассмотрим работу через docker Перед запуском контейнера на хостовую машину потребуется установить docker и плагин compose.

...

Установка docker.

Установка плагина compose.

Далее создать на хостовой машине папку:

Без форматирования
sudo mkdir /opt/keycloak

В этой папке создать файл docker-compose.yml:

Блок кода
titledocker-compose.yml
collapsetrue
version: "3.9"
services:
keycloak-postgres:
image: library/postgres:${KC_POSTGRES_IMAGE_TAG:-15}
container_name: ${POSTGRES_CONTAINER_NAME:-postgres}
restart: unless-stopped
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
healthcheck:
test: pg_isready -d postgres
interval: 10s
timeout: 5s
retries: 3
start_period: 5s
ports:
- ${KC_POSTGRES_PORT_MAPPING:-5435}:5432
volumes:
- postgres:/var/lib/postgresql/data
deploy:
resources:
limits:
memory: 256M
keycloak:
image: quay.io/keycloak/keycloak:20.0.5
container_name: keycloak
restart: unless-stopped
command:
- start --auto-build --db postgres --hostname-strict-https false
--hostname-strict false --http-enabled true --import-realm
--spi-login-protocol-openid-connect-suppress-logout-confirmation-screen=true
--spi-login-protocol-openid-connect-legacy-logout-redirect-uri=true
--spi-user-profile-legacy-user-profile-read-only-attributes *_RES_ACCESS_MODE
environment:
KC_DB_URL: jdbc:postgresql://keycloak-postgres:5432/postgres
KC_DB_USERNAME: postgres
KC_DB_PASSWORD: postgres
KC_DB_SCHEMA: public
KC_FEATURES: preview
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
ports:
- 8282:8080
depends_on:
keycloak-postgres:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://0.0.0.0:8080/realms/master"]
start_period: 10s
interval: 30s
retries: 3
timeout: 5s
volumes: postgres:

выполнить запуск командой:

Без форматирования
sudo docker compose up -d

после запуска контейнера следует дождаться полного старта сервиса и убедиться, что он находиться в состоянии "healthy":

Без форматирования
$ sudo docker compose ps
NAME                IMAGE                              COMMAND                  SERVICE             CREATED             STATUS                PORTS
keycloak            quay.io/keycloak/keycloak:20.0.5   "/opt/keycloak/bin/k…"   keycloak            2 days ago          Up 2 days (healthy)   8443/tcp, 0.0.0.0:8282->8080/tcp, :::8282->8080/tcp
postgres            library/postgres:15                "docker-entrypoint.s…"   keycloak-postgres   2 days ago          Up 2 days (healthy)   0.0.0.0:5435->5432/tcp, :::5435->5432/tcp
Примечание

Для корректного запуска рекомендуется установить compose плагин по инструкции

...

--spi-login-protocol-openid-connect-suppress-logout-confirmation-screen

...

--spi-login-protocol-openid-connect-legacy-logout-redirect-uri

...


Подсказка

Посмотреть более полную конфигурацию можно здесь 

Блок кода
languagebash
themeMidnight
titleзапуск keycloak
docker compose up -d

После старта сервиса можно перейти в web для его конфигурации http://{serverIp}:8282 , данные для входа указаны в конфигурации docker-compose.yml KEYCLOAK_ADMIN и KEYCLOAK_ADMIN_PASSWORD.

Раскрыть
titleПереход в консоль администратора

Входим в Administration Console 

Image Removed

Настройка

Подсказка
titleОфициальная инструкция

Полная инструкция по настройке

Первоначальная

Конфигурация Realms

Согласно документации keycloak "master" realm мы используем только для создание других realms. В свою очередь созданные нами realms из мастера мы будем конфигурировать в будущем и интегрировать с приложениями. 

Раскрыть
titleДля наглядности обратим внимание на схему

Image Removed

Подсказка
titlerealm's definition

A realm manages a set of users, credentials, roles, and groups. A user belongs to and logs into a realm. Realms are isolated from one another and can only manage and authenticate the users that they control.

Таким образом, мы можем создавать разные области, в которых будет собственная настройка для авторизации и аутентификации.

...

titleСоздаем новый realm

Image Removed

В секцию "Realm name" внесем "softwlc" и нажмем на кнопку создания.

Image Removed

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

Конфигурация Clients

Сущность client - нужна нам для связи keycloak с конкретным приложением.
Создадим клиент для взаимодействия с wifi-cab в качестве общего примера:

...

titleСоздаем новый client

Step 1:

Image Removed

Step 2:

Image Removed

Step 3:

Image Removed

Step 4 (set extra settings):

Image Removed

Подсказка

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

Для корректной работы нужно создать следующие клиенты:

  • wifi-cab - для работы с личным кабинетом.
  • portal-constructor - для работы с порталом.

  • nbi - для правильного взаимодействия с back-сервисом.
  • ems - для работы с системой управления.

Конфигурация Mappers

Сущность mapper - нужна нам для определения keycloak, какой атрибут пользователя передать в приложение.
Каждое приложение использует свои mappers, поэтому иногда процедуру требуется сделать несколько раз в зависимости от приложения.
Создадим mapper для взаимодействия с wifi-cab в качестве общего примера:

...

titleСоздание mapper

Для примера создается атрибут роли. Все остальные атрибуты создают по-аналогии.
Если есть исключения - это будет отдельно выделено.

Step 1:

Image Removed

Step 2:

Image Removed

Предупреждение

При создании mapper для атрибута Eltex-Domain обязательно нужно включить "Multivalued"

Подсказка

Чтобы настроить нужные mappers следует обратиться к таблице атрибутов в документации

Конфигурация Groups

Сущность group - нужна нам для применения к пользователям общих политик, например атрибутов.
Создадим группу для взаимодействия с wifi-cab в качестве общего примера:

Раскрыть
titleСоздание групп

Step 1:

Image Removed

Step 2:

Image Removed

Step 3 (добавление атрибутов):

Image Removed

Step 4 (место для добавления пользователей):

Image Removed

Атрибуты для приложений могут различаться, поэтому при создании групп берите информацию согласно таблице атрибутов.

Таблица атрибутов, используемых SoftWLC

...

Да.

Обязательный
для: ЛК/КП/NBI.

...

Подсказка

Посмотреть полную информацию о конфигурации и параметрах можно в официальной документации.


Примечание

По умолчанию в Keycloak в настройке "Require SSL" установлено значение "External requests". Это означает, что подключаться к серверу по протоколу HTTP смогут только пользователи из подсетей "127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/12, 172.16.0.0/12".

https://www.keycloak.org/docs/latest/server_admin/#_ssl_modes


Раскрыть
titleКак изменить настройку Require SSL внутри контейнера

В данном примере предполагается что используется БД postgres.

Проверить имя контейнера с БД postgres:

Без форматирования
sudo docker ps
CONTAINER ID   IMAGE                              COMMAND                  CREATED       STATUS                PORTS                                                 NAMES
40aab4f3d28b   quay.io/keycloak/keycloak:20.0.5   "/opt/keycloak/bin/k…"   13 days ago   Up 6 days (healthy)   8443/tcp, 0.0.0.0:8282->8080/tcp, :::8282->8080/tcp   keycloak
9f6deac8dd6c   postgres:15                        "docker-entrypoint.s…"   13 days ago   Up 6 days (healthy)   0.0.0.0:5435->5432/tcp, :::5435->5432/tcp             postgres

Выполнить команду для исправления записи в БД:

Без форматирования
sudo docker exec -it postgres psql -U postgres -w postgres -c "update realm set ssl_required='NONE' where name='master';"
UPDATE 1

Перезапустить контейнеры:

Без форматирования
cd /opt/keycloak/
sudo docker-compose stop && sudo docker-compose up -d
Stopping keycloak ... done
Stopping postgres ... done
Starting postgres ... done
Starting keycloak ... done



Примечание

Для всех новых создаваемых realm значение настройки "Require SSL" будет "External requests". Потребуется для нового realm в разделе "Realm settings" изменить настройку "Require SSL" : "None".

Настройка Keycloak

Keycloak - первоначальная настройка

Отрыть браузер, в браузере пере"Настройка конструктора порталов" йти на страницу http://<IP-адрес сервера>:8282 и выбрать раздел Administration Console. После выбора раздела будет совершен переход на страницу авторизации.

Image Added

Данные для входа указаны в конфигурации docker-compose.yml в переменных окружения KEYCLOAK_ADMIN и KEYCLOAK_ADMIN_PASSWORD (по умолчанию admin / admin).

После ввода логина/пароля откроется административная консоль:

Image Added

Создание Realm

Realm - область управления, которая содержит совокупность всех данных: пользователей, учетные данные, роли и группы; необходимых для аутентификации и авторизации пользователей данного realm. Каждый realm изолирован от других realm-ов.

Для одного комплекса SoftWLC достаточно одного realm.

Предупреждение

Realm "master" можно использовать только для создания других realms. Не редактируйте и не пытайтесь удалить данный realm.

Для создания нового realm требуется нажать на список с выбором текущего realm (сразу после старта сервиса будет выбран единственный realm "master") и в открывшемся меню нажать кнопку "Create Realm":

Image Added

В параметрах при создании нового realm достаточно указать только его имя. Имя может быть произвольным, здесь и в дальнейшем будет использовано имя realm "softwlc".

Image Added

Нажимаем кнопку "Create". После создания переход в новый realm выполниться автоматически, дальнейшие настройки выполняются в нем.

Создание Clients

Client - объект, который содержит совокупность параметров, необходимых для связи с определенным приложением.

Для настройки взаимодействия сервисов SoftWLC с Keycloak потребуется создать три clients:

  • wifi-cab - для взаимодействия с ЛК;
  • portal-constructor - для взаимодействия с КП;
  • ems - для взаимодействия с EMS.
Подсказка

Имена clients могут быть произвольными, однако для удобства настройки и администрирования рекомендуется использовать названия сервисов SoftWLC.


Примечание

Перед любыми действиями с realm необходимо убедиться, что Вы находитесь в целевом realm.

Создание client для Личного кабинета

В созданном realm "softwlc" переходим в раздел clients и нажимаем кнопку "Сreate client":

Image AddedВ открывшемся окне вводим в поле "Client ID": "wifi-cab" и нажимаем клавишу "Next":

Image Added

В следующем окне включаем настройку "Client authentication" и контролируем, что включена "Authentication flow": "Standard flow":

Image AddedНажимаем кнопку "Save".

Откроются дополнительные настройки. Во вкладке "Settings" задаем параметр "Valid redirect URIs": "http://<IP-адрес сервера SoftWLC>:8080/wifi-cab/sso":

Image Added

и нажимаем кнопку "Save".

Подсказка

При необходимости, если используется несколько экземпляров приложения eltex-wifi-cab, можно указать несколько различных значений "Valid redirect URIs", нажав на кнопку "Add valid redirec URIs".


Создание client для Конструктора порталов

В созданном realm "softwlc" переходим в раздел clients и нажимаем кнопку "Сreate client":

Image AddedВ открывшемся окне вводим в поле "Client ID": "portal-constructor" и нажимаем клавишу "Next":

Image Added

В следующем окне включаем настройку "Client authentication", контролируем, что включена "Authentication flow": "Standard flow":

Image Added

Нажимаем кнопку "Save".

Откроются дополнительные настройки. Во вкладке "Settings" задаем параметр "Valid redirect URIs": "http://<IP-адрес сервера SoftWLC>:8080/epadmin/sso":

Image Added

и нажимаем кнопку "Save".

Подсказка

При необходимости, если используется несколько экземпляров приложения eltex-portal-constructor, можно указать несколько различных значений "Valid redirect URIs", нажав на кнопку "Add valid redirec URIs".

Создание client для EMS

В созданном realm "softwlc" переходим в раздел clients и нажимаем кнопку "Сreate client":

Image AddedВ открывшемся окне вводим в поле "Client ID": "ems" и нажимаем клавишу "Next":

Image Added

В следующем окне НЕ включаем настройку "Client authentication", контролируем, что включена "Authentication flow": "Standard flow":

Image Added

Нажимаем кнопку "Save".

Предупреждение

Перепроверьте, не включена ли настройка "Client authentication". При создании client для приложения Eltex-EMS включать настройку "Client authentication" НЕ нужно!


Откроются дополнительные настройки. Во вкладке "Settings" задаем параметр "Valid redirect URIs": "http://localhost":

Image Added

и нажимаем кнопку "Save".

Настройка mappers

Mapper (далее "маппер") отвечает за передачу атрибута пользователя в приложение. Настройка необходимых атрибутов выполняется отдельно для каждого "client". Для каждого приложения существует своя таблица атрибутов, которые необходимо настроить.

Настройка mappers для Личного кабинета

Для ЛК поддержаны атрибуты:

Имя атрибутаПрименениеОбязательность
Eltex-User-RoleПередача роли пользователяДа
Eltex-DomainПередача домена пользователяДа
User-NameПередача имени пользователяДа
Eltex-User-TimezoneПередача таймзоны пользователяДа

Для добавления атрибутов переходим в realm "softwlc", открываем client "wifi-cab" и открываем вкладку "Client scopes":

Image AddedВ данной вкладке открываем "Assigned client scope" и нажимаем "wifi-cab-dedicated":

Image AddedНажимаем кнопку "Configure a new mapper":

Image AddedВыбираем в колонке "Name" "User Attribute".

В открывшемся окне заполняем поля названием атрибута (в приведенном примере Eltex-User-Role):

Image Added

"Name" : "Eltex-User-Role"

"User-Attribute": "Eltex-User-Role"

"Token Claim Name": "Eltex-User-Role"

Нажимаем кнопку "Save".

Аналогично добавляем атрибуты "User-Name" и "Eltex-User-Timezone".

Предупреждение

При создании маппера для атрибута "Eltex-Domain" необходимо включить параметр "Multivalued".

Image Added

Состояние мапперов для client "wifi-cab" после настройки:

Image Added

Настройка mappers для Конструктора порталов

Для КП поддержаны атрибуты аналогичные ЛК. Настройка мапперов для client "portal-constructor" выполняется аналогично настройке мапперов для ЛК:

Имя атрибутаПрименениеОбязательность
Eltex-User-RoleПередача роли пользователяДа
Eltex-DomainПередача домена пользователяДа
User-NameПередача имени пользователяДа
Eltex-User-TimezoneПередача таймзоны пользователяНет


Примечание

Рекомендуем при наличии возможности все же указать значение параметра "Eltex-User-Timezone" . Данный параметр требуется для корректного отображения времени входа в КП и даты создания ресурсов (изображений, видео и т.п.).


Состояние мапперов для client "portal-constructor" после настройки:

Image Added

Настройка mappers для EMS

Если для ЛК и КП атрибуты совпадают, то для EMS в связи с архитектурными отличиями используется практически полностью другой набор атрибутов. Атрибуты, которые используются при настройке client для приложения EMS, имеют в своем названии "EMS". В частности, ЛК/КП и EMS имеют различный набор ролей. Настройки роли EMS определяют домен пользователя, для пользователя ЛК/КП же требуется указание отдельного атрибута Eltex-Domain.

Предупреждение

Обратите внимание, Eltex-User-Role и Eltex-EMS-Role - разные атрибуты!


Подсказка

При настройке mappers для EMS используется атрибут Eltex-EMS-Role.

Домен пользователя определяется настройками роли. Настройка атрибутов выполняется в clients "ems".

Имя атрибутаПрименениеОбязательность
User-NameПередача имени пользователяДа
Eltex-EMS-RoleИмя роли в EMSДа
Eltex-EMS-ResendTrapНастройка профайла пользователя:
Пересылать аварии на Email
Нет
Eltex-EMS-SendLogsНастройка профайла пользователя:
Пересылать логи на Email
Нет
Eltex-EMS-SendOntProblems

Настройка профайла пользователя:

Пересылать проблемы ONT на Email

Нет
Eltex-EMS-IpList

Настройка профайла пользователя:

IP-адрес для режима "multiuser"

Нет

Последовательность действий при добавлении мапперов аналогична ЛК и КП. Состояние мапперов для client "ems" после настройки:

Image Added

Предупреждение

При настройке мапперов для EMS необходимо проконтролировать, что настройка "Add to access token" включена!

Image Added


Особенности взаимодействия сервиса eltex-radius-nbi с Keycloak

Сервис eltex-radius-nbi при взаимодействии с Keycloak использует токен (AccessToken), с которым к нему обратилось приложение (ЛК, КП или EMS), при этом используются ограничения на права обращения к методам NBI из роли пользователя.

Для обращения непосредственно к api eltex-radius-nbi можно использовать системных пользователей или создать их в ЛК.

Добавление и настройка Groups

Groups - группа общих политик и атрибутов, применяемых к пользователю. 

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

Создание групп

Для создания группы в realm "softwlc" перейдем в меню Groups и нажмем кнопку "Create group":

Image Addedв поле name указать имя группы "wifi-cab" и нажать кнопку "Create".

Аналогичным способом создать группы для приложений КП и EMS. В итоге получится следующий список групп:

Image AddedСоздание и настройка подгрупп

В группе "wifi-cab" нажать на Image Added справа от названия группы. В открывшемся меню:

Image Addedнажать "Create group".

В открывшемся окне ввести имя группы "default_provider". Имя группы может быть любым, рекомендуется использовать имя, совпадающее с названием роли в ЛК/EMS:

Image Addedи нажать кнопку "Create".

После создания подгруппы раскрываем группу "wifi-cab" и нажимаем на ранее созданную подгруппу "default_provider":

Image Added

Вводим:

  • "Key": "Eltex-User-Role"
  • "Value": "default_provider"

нажимаем кнопку "Save".

После сохранения автоматически внизу добавиться новая строка для ввода следующего значения. Аналогичным образом добавим значения для атрибутов "Eltex-Domain" и "Eltex-User-Timezone". После этого список атрибутов примет вид:

Image Added

Подсказка

При необходимости указать несколько доменов можно указать атрибут "Eltex-Domain" несколько раз с разными значениями доменов.


Примечание

Корректным написанием домена является перечисление доменов с конца дерева вверх через ".", например:

"Novosibirsk.root" или "Eltex.Novosibirsk.root".


Аналогичным образом создаем подгруппу и настраиваем ее для КП. Итоговый вид:

Image Added

Так же создаем подгруппу "SuperUser" для группы "ems" и добавляем в нее необходимые атрибуты:

Image AddedДля корректного взаимодействия с EMS достаточно выполнить настройку в подгруппе атрибута "Eltex-EMS-Role". Другие атрибуты EMS рекомендуется настраивать индивидуально для пользователя.

Добавление и настройка пользователей

Примечание

Не рекомендуется создавать пользователя с именем "admin", т.к. это имя совпадает с именем пользователя под которым выполняется управление Keycloak и он не может с этим именем войти в EMS.


Для добавления пользователя необходимо открыть realm "softwlc" и нажать "Users":

Image Added

В открывшемся окне нажать кнопку "Create new user" и ввести в поле "Username" имя пользователя (в приведенном примере user):

Image Added

нажать кнопку "Create".

После создания пользователя автоматически откроются его свойства (User details), в них переходим на вкладку "Attributes":

Image Added

Вводим:

  • "Key": "User-Name"
  • "Value": "user"

нажимаем кнопку "Save". Имя пользователя и значение атрибута могут не совпадать. При аутентификации необходимо вводить в качестве имени пользователя значение указанное в атрибуте "User-Name".

Переходим на вкладку Groups и нажимаем кнопку "Join Group", раскрываем группу "wifi-cab" и выбираем подгруппу "default_provider":

Image Added

И нажимаем кнопку "Join".

Аналогичным образом добавляем пользователя в подгруппы "portal-constructor - default_provider" и "ems - SuperUser". В итоге членство пользователя в группах будет выглядеть следующим образом:

Image Added

Интеграция с LDAP

Возможна интеграция Keycloak с LDAP. В приведенном примере рассматривается интеграция с OpenLDAP. Установка и настройка OpenLDAP в данной документации не рассматривается. Предполагается, что он уже установлен и готов к работе.

Документация Keycloak по настройке интеграции с LDAP.

Интеграция с LDAP может иметь разную конфигурацию и при необходимости можно выбрать иные настройки.

Далее в инструкции указан один из вариантов интеграции.

Настройка взаимодействия с LDAP

Настройка интеграции с LDAP выполняется в рамках одного realm.

Откроем realm "softwlc" и перейдем на вкладку "User federation":

Image Added

В открывшейся вкладке нажимаем на кнопку "Add Ldap providers" и заполняем параметры взаимодействия с LDAP:

ПараметрЗначение
Console display nameldap
VendorOther
Connection URLldap://ldap.eltex.loc
Bind typesimple
Bind DNuid=ivan.ivanov,ou=Отдел SoftWLC,dc=eltex,dc=loc
Bind credentials123456
Edit modeREAD_ONLY
Users DNdc=eltex,dc=loc
Username LDAP attributeuid
RDN LDAP attributeuid
UUID LDAP attributeuid
User object classes*
Search scopeSubtree
Import usersON
Periodic full syncON
Full sync period300

В настройках "Connection URL", "Bind DN", "Bind credentials", "Users DN" необходимо указать параметры подключения к определенному LDAP, в приведенном примере приведены тестовые данные.

После выполнения настроек нажимаем кнопку "Save".

Раскрыть
titleПример настройки

Image Added

После сохранения настроек рекомендуется проверить соединение и возможность подключения к LDAP со стороны Keycloak:

  • для проверки соединения необходимо в разделе "Connection and authentication settings" нажать на кнопку "Test connection";
  • для проверки аутентификации под используемой УЗ надо нажать на кнопку "Test authentication".

В случае успешного подключения вверху справа появиться сообщение Image Added

В случае проблем с соединением надо проверить доступность сервера LDAP по указанному адресу, а также проверить работоспособность УЗ и правильность введенных данных.

Настройка group-ldap-mapper

Предположим, что отсутствует возможность указать нужные атрибуты сразу в LDAP. В этом случае потребуется решить следующие задачи:

  • Добавление пользователей из LDAP в Keycloak
  • Добавление пользователей LDAP в группы Keycloak
  • Добавление нужных атрибутов в рамках Keycloak

Откроем созданный коннект подключения к LDAP и в нем перейдем во вкладку "Mappers":

Image AddedНажмем на кнопку "Add mapper". В открывшемся окне введем:

  • Name: "group-mapper"
  • Mapper type: выберем "group-ldap-mapper" - после этого раскроется полный список параметров настройки:

Image Addedнастроим параметры:

  • LDAP Groups DN: "ou=eltexGroups,ou=eltex.dc=eltex,dc=loc" - пространство, где будем выполняться поиск групп;
  • Group Name LDAP: "cn" - название параметра, где указано имя группы;
  • Group Object Classes: "posixGroup" - название параметра, указывающего признак группы;
  • Preserve Group Interface: отключить;
  • Ignore Missing Groupsвключить игнорирование отсутствующих групп;
  • Membership LDAP Attribute: "memberUid" - название параметра, указывающего признак вхождения в группу;
  • Membership Attribute Type: "UID"  - указывает каким типом добавлен пользователь в группу;
  • Membership User LDAP Attribute: "uid" - имя пользователя в LDAP по которому идет маппинг в группу.

Нажимаем кнопку "Save".

Предупреждение

Параметры, указанные в примере конфигурации могут различаться для разных LDAP, при необходимости рекомендуется воспользоваться документацией LDAP и Keycloak.

После сохранения настроек переходим в добавленный LDAP, раскрываем меню справа вверху и выбираем "Sync all users":

Image Added

В случае успешной синхронизации вверху справа появиться сообщение вида: Image Added.

После этого станет видно новые группы и пользователей, которых можно добавлять в группы.

Настройка маппинга имени пользователя в атрибут User-Name

Настройку маппинга имени пользователя LDAP в атрибут User-Name выполняется в рамках настройки мапперов каждого client realm.

Выполним настройку для client "wifi-cab". Для этого откроем "Clients" - "wifi-cab" - "Client scopes" - "wifi-cab-dedicated" - атрибут "User-Name":

Image Addedзаменим значение "User Attribute" на "firstName" и нажмем кнопку "Save".

Далее необходимо настроить аналогичным образом мапперы clients для portal-constructor и ems.

Добавление пользователей в группу

Добавление пользователей импортированных из LDAP в ранее созданные группы ems, portal-constructor, wifi-cab выполняется аналогично добавлению пользователей Keycloak.

На примере группы wifi-cab: нажимаем "Groups" - "wifi-cab" переходим в подгруппу "default_provider" - "Members" и нажимаем кнопку "Add member":

Image Addedвыбираем пользователя "eltex" (в приведенном примере данные пользователи импортированы из LDAP) и нажимаем кнопку "Add".

После этого данный пользователь появиться в подгруппе "default_provider". Аналогичным образом добавляем пользователя в подгруппы "portal-constructor - default_provider" и "ems - SuperUser".

Настройка NBI

Настройка взаимодействия с Keycloak выполняться в файле конфигурации "/etc/eltex-radius-nbi/radius_nbi_config.txt" в разделе:

Блок кода
# SSO settings
sso.enabled=true
sso.clientSecret=
sso.clientId=

# SSO REST
sso.rest.server.protocol=http
sso.rest.server.address=<IP-адрес сервера Keycloak>
sso.rest.server.port=8282
sso.rest.server.timeout.sec=10
# possible value for sso.rest.protocol.provider are "rtk", "keycloak"
sso.rest.protocol.provider=keycloak
#the "version" settings only matter when "provider=rtk"
sso.rest.protocol.version=2.0
#the "username" settings only matter when "provider=rtk"
sso.rest.username=
#the "password" settings only matter when "provider=rtk"
sso.rest.password=

# SSO SETTINGS
sso.rest.getToken.path=/realms/softwlc/protocol/openid-connect/token
sso.rest.getUserInfo.path=/realms/softwlc/protocol/openid-connect/userinfo

В данной конфигурации необходимо указать параметры подключения к серверу Keycloak:

  • sso.enabled=true - включение возможности входа по SSO
  • sso.rest.server.address=<IP-адрес сервера Keycloak>
  • sso.rest.server.port=8282 - порт сервера Keycloak, по умолчанию 8282
  • sso.rest.protocol.provider=keycloak - тип используемого SSO сервера - "keycloak"
  • sso.rest.getToken.path=/realms/softwlc/protocol/openid-connect/token - после /realm/ необходимо указать имя realm, как оно создано в Keycloak
  • sso.rest.getUserInfo.path=/realms/softwlc/protocol/openid-connect/userinfo - после /realm/ необходимо указать имя realm, как оно создано в Keycloak

Выполнить рестарт сервиса:

Без форматирования
sudo systemctl restart tomcat8

Настройка личного кабинета

Примечание

После включения интеграции с keycloak станет невозможно добавлять/редактировать/удалять системных пользователей!

Настройка взаимодействия с Keycloak выполняться в файле конфигурации "/etc/eltex-wifi-cab/system.xml" в разделе:

Блок кода
    <!-- SSO Settings -->
    <entry key="sso.enabled">true</entry>
    <entry key="sso.redirectUri">http://IP-адрес ЛК:8080/wifi-cab/sso</entry>
    <entry key="sso.clientSecret">HoDKUreDl0xmjUgV7p19YADAT5fvtOOG</entry>
    <entry key="sso.clientId">wifi-cab</entry>
    <entry key="sso.localauth.enabled">true</entry>

    <!-- SSO Auth -->
    <entry key="sso.auth.server.protocol">http</entry>
    <entry key="sso.auth.server.address">IP-адрес сервера Keycloak</entry>
    <entry key="sso.auth.server.port">8282</entry>

    <entry key="sso.auth.auth.path">/realms/softwlc/protocol/openid-connect/auth</entry>
    <entry key="sso.auth.logout.path">/realms/softwlc/protocol/openid-connect/logout</entry>

    <!-- SSO REST -->
    <entry key="sso.rest.server.protocol">http</entry>
    <entry key="sso.rest.server.address">IP-адрес сервера Keycloak</entry>
    <entry key="sso.rest.server.port">8282</entry>
    <entry key="sso.rest.server.timeout.sec">10</entry>
    <entry key="sso.rest.protocol.provider">keycloak</entry> <!-- rtk/keycloak -->
    <entry key="sso.rest.protocol.version">2.0</entry> <!--setting only matters when provider=rtk-->
    <entry key="sso.rest.username"></entry> <!--setting only matters when provider=rtk-->
    <entry key="sso.rest.password"></entry> <!--setting only matters when provider=rtk-->

    <entry key="sso.rest.getToken.path">/realms/SWLC/protocol/openid-connect/token</entry>
    <entry key="sso.rest.getUserInfo.path">/realms/SWLC/protocol/openid-connect/userinfo</entry>
  • <entry key="sso.enabled">true</entry> - включение возможности входа по SSO
  • <entry key="sso.redirectUri">http://IP-адрес ЛК:8080/wifi-cab/sso</entry> - адрес ЛК для обратного редиректа. Данная настройка должна совпадать с настройкой указанной в realm в разделе Settings в параметре Valid redirecr URLs.
  • <entry key="sso.clientSecret">HoDKUreDl0xmjUgV7p19YADAT5fvtOOG</entry> - secret, необходимый для взаимодействия с realm. Находится в настройках клиента wifi-cab " в разделе Credentials" в поле "Client secret".
Раскрыть
titleПример

Image Added


  • <entry key="sso.clientId">wifi-cab</entry> - имя клиента, как оно указано в настройках Keycloak (Clients)
  • <entry key="sso.localauth.enabled">true</entry> - разрешение локальной аутентификации в ЛК (для запрета необходимо указать "false")
  • <entry key="sso.auth.server.protocol">http</entry> - тип используемого протокола
  • <entry key="sso.auth.server.address">IP-адрес сервера Keycloak</entry> - адрес сервера Keycloak
  • <entry key="sso.auth.server.port">8282</entry> - порт сервера Keycloak (по умолчанию 8282)
  • <entry key="sso.auth.auth.path">/realms/softwlc/protocol/openid-connect/auth</entry> - после /realm/ необходимо указать имя realm, как оно создано в Keycloak
  • <entry key="sso.auth.logout.path">/realms/softwlc/protocol/openid-connect/logout</entry> - после /realm/ необходимо указать имя realm, как оно создано в Keycloak
  • <entry key="sso.rest.server.address">IP-адрес сервера Keycloak</entry> - адрес сервера Keycloak
  • <entry key="sso.rest.server.port">8282</entry>  - порт сервера Keycloak (по умолчанию 8282)
  • <entry key="sso.rest.protocol.provider">keycloak</entry> - тип используемого сервера "keycloak"
  • <entry key="sso.rest.getToken.path">/realms/SWLC/protocol/openid-connect/token</entry> - после /realm/ необходимо указать имя realm, как оно создано в Keycloak
  • <entry key="sso.rest.getUserInfo.path">/realms/SWLC/protocol/openid-connect/userinfo</entry> - после /realm/ необходимо указать имя realm, как оно создано в Keycloak

Другие параметры SSO не требуют изменений.

Выполнить рестарт сервиса:

Без форматирования
sudo systemctl restart eltex-wifi-cab

Настройка конструктора порталов

Настройка взаимодействия с Keycloak выполняться в файле конфигурации "/etc/eltex-portal-constructor/application.conf" в разделе:

Блок кода
sso {
    enabled = true

    # enable or disable local login
    localLoginAllowed = true

    # rtk, keycloak
    provider = keycloak

    # Must be in double quotes. Only for 'rtk' provider
    version = "1.0"

    rest {
        scheme = http
        host = <IP-адрес сервера Keycloak>
        port = 8282
        sso_api_path = /realms/softwlc/protocol/openid-connect
    }
    auth {
        scheme = http
        host = <IP-адрес сервера Keycloak>
        port = 8282
        authentication_path = /realms/softwlc/protocol/openid-connect/auth
        logout_path = /realms/softwlc/protocol/openid-connect/logout
    }


    params {
        client_id = portal-constructor
        # URL of epadmin, URL must be in double quotes (!!!)
        redirect_uri = "http://<IP-адрес КП>:8080/epadmin/sso"
        client_secret = N0F5T5QIFed7629AYqGTDNzD0eseVFZH
    }
}
  • enabled = true - включение возможности входа по SSO
  • localLoginAllowed = true - разрешение локальной аутентификации в КП (для запрета надо указать "false")
  • provider = keycloak - тип используемого SSO сервера - "keycloak"
  • scheme = http - использовать http протокол
  • host = <IP-адрес сервера Keycloak> - адрес сервера Keycloak
  • port = 8282 - порт сервера Keycloak (по умолчанию 8282)
  • sso_api_path = /realms/softwlc/protocol/openid-connect - после /realm/ необходимо указать имя realm, как оно создано в Keycloak
  • authentication_path = /realms/softwlc/protocol/openid-connect/auth - после /realm/ необходимо указать имя realm, как оно создано в Keycloak
  • logout_path = /realms/softwlc/protocol/openid-connect/logout - после /realm/ необходимо указать имя realm, как оно создано в Keycloak
  • client_id = portal-constructor - имя клиента, как оно указано в настройках Keycloak (Clients)
  • redirect_uri = "http://<IP-адрес КП>:8080/epadmin/sso" - адрес КП для обратного редиректа. Данная настройка должна совпадать с настройкой, указанной в realm в разделе Settings в параметре Valid redirecr URLs.

    Предупреждение

    Настройка обязательно должна указываться в кавычках!


  • client_secret = N0F5T5QIFed7629AYqGTDNzD0eseVFZH - secret, необходимый для взаимодействия с realm. Находиться в настройках realm portal-constructor "Credentials" в поле "Client secret".
Раскрыть
titleПример

Image Added

Выполнить рестарт сервиса:

Без форматирования
sudo systemctl restart eltex-portal-constructor

Настройка EMS

Примечание

После включения интеграции с Keycloak станет невозможно добавлять/редактировать/удалять системных пользователей!

Настройка взаимодействия с Keycloak выполняться в файле конфигурации "/usr/lib/eltex-ems/conf/system-config.txt" в разделе:

Блок кода
# sso
sso.enabled=true
sso.provider=keycloak
sso.callback-host=localhost
sso.callback-port=45969
sso.keycloak.realm=softwlc
sso.keycloak.auth-server-url=http://<IP-адрес сервера keycloak>:8282
sso.keycloak.ssl-required=external
sso.keycloak.resource=ems
sso.keycloak.public-client=true
sso.keycloak.use-resource-role-mappings=true
sso.keycloak.enable-pkce=true
  • sso.enabled=true - включение возможности входа по SSO
  • sso.provider=keycloak - тип используемого SSO сервера - "keycloak"
  • sso.callback-host=localhost - без изменений
  • sso.callback-port=45969 - без изменений
  • sso.keycloak.realm=softwlc - имя realm, взаимодействие с которым настроено в Keycloak
  • sso.keycloak.auth-server-url=http://<IP-адрес сервера keycloak>:8282 - адрес сервера Keycloak:порт
  • sso.keycloak.ssl-required=external - без изменений
  • sso.keycloak.resource=ems - имя клиента, как оно указано в настройках Keycloak (Clients)
  • sso.keycloak.public-client=true - без изменений
  • sso.keycloak.use-resource-role-mappings=true - без изменений
  • sso.keycloak.enable-pkce=true - без изменений

Выполнить рестарт сервиса:

Без форматирования
sudo systemctl restart eltex-ems

Решение проблем

В случае, если редирект не происходит или страница авторизации Keycloak не открывается необходимо проверить доступность сервера с Keycloak с машины, на которой установлен комплекс SoftWLC командами:

Без форматирования
curl http://<IP-адрес сервера keycloak>:8282/realms/softwlc/.well-known/openid-configuration
curl http://<IP-адрес сервера keycloak>:8282/realms/softwlc/protocol/openid-connect/certs


Раскрыть
titleПример вывода

curl http://100.123.0.30:8282/realms/softwlc/.well-known/openid-configuration
{"issuer":"http://100.123.0.30:8282/realms/softwlc","authorization_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/auth","token_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/token","introspection_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/token/introspect","userinfo_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/userinfo","end_session_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/logout","frontchannel_logout_session_supported":true,"frontchannel_logout_supported":true,"jwks_uri":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/certs","check_session_iframe":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/login-status-iframe.html","grant_types_supported":["authorization_code","implicit","refresh_token","password","client_credentials","urn:ietf:params:oauth:grant-type:device_code","urn:openid:params:grant-type:ciba","urn:ietf:params:oauth:grant-type:token-exchange"],"acr_values_supported":["0","1"],"response_types_supported":["code","none","id_token","token","id_token token","code id_token","code token","code id_token token"],"subject_types_supported":["public","pairwise"],"id_token_signing_alg_values_supported":["PS384","ES384","RS384","HS256","HS512","ES256","RS256","HS384","ES512","PS256","PS512","RS512"],"id_token_encryption_alg_values_supported":["RSA-OAEP","RSA-OAEP-256","RSA1_5"],"id_token_encryption_enc_values_supported":["A256GCM","A192GCM","A128GCM","A128CBC-HS256","A192CBC-HS384","A256CBC-HS512"],"userinfo_signing_alg_values_supported":["PS384","ES384","RS384","HS256","HS512","ES256","RS256","HS384","ES512","PS256","PS512","RS512","none"],"userinfo_encryption_alg_values_supported":["RSA-OAEP","RSA-OAEP-256","RSA1_5"],"userinfo_encryption_enc_values_supported":["A256GCM","A192GCM","A128GCM","A128CBC-HS256","A192CBC-HS384","A256CBC-HS512"],"request_object_signing_alg_values_supported":["PS384","ES384","RS384","HS256","HS512","ES256","RS256","HS384","ES512","PS256","PS512","RS512","none"],"request_object_encryption_alg_values_supported":["RSA-OAEP","RSA-OAEP-256","RSA1_5"],"request_object_encryption_enc_values_supported":["A256GCM","A192GCM","A128GCM","A128CBC-HS256","A192CBC-HS384","A256CBC-HS512"],"response_modes_supported":["query","fragment","form_post","query.jwt","fragment.jwt","form_post.jwt","jwt"],"registration_endpoint":"http://100.123.0.30:8282/realms/softwlc/clients-registrations/openid-connect","token_endpoint_auth_methods_supported":["private_key_jwt","client_secret_basic","client_secret_post","tls_client_auth","client_secret_jwt"],"token_endpoint_auth_signing_alg_values_supported":["PS384","ES384","RS384","HS256","HS512","ES256","RS256","HS384","ES512","PS256","PS512","RS512"],"introspection_endpoint_auth_methods_supported":["private_key_jwt","client_secret_basic","client_secret_post","tls_client_auth","client_secret_jwt"],"introspection_endpoint_auth_signing_alg_values_supported":["PS384","ES384","RS384","HS256","HS512","ES256","RS256","HS384","ES512","PS256","PS512","RS512"],"authorization_signing_alg_values_supported":["PS384","ES384","RS384","HS256","HS512","ES256","RS256","HS384","ES512","PS256","PS512","RS512"],"authorization_encryption_alg_values_supported":["RSA-OAEP","RSA-OAEP-256","RSA1_5"],"authorization_encryption_enc_values_supported":["A256GCM","A192GCM","A128GCM","A128CBC-HS256","A192CBC-HS384","A256CBC-HS512"],"claims_supported":["aud","sub","iss","auth_time","name","given_name","family_name","preferred_username","email","acr"],"claim_types_supported":["normal"],"claims_parameter_supported":true,"scopes_supported":["openid","phone","profile","web-origins","microprofile-jwt","offline_access","address","email","roles","acr"],"request_parameter_supported":true,"request_uri_parameter_supported":true,"require_request_uri_registration":true,"code_challenge_methods_supported":["plain","S256"],"tls_client_certificate_bound_access_tokens":true,"revocation_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/revoke","revocation_endpoint_auth_methods_supported":["private_key_jwt","client_secret_basic","client_secret_post","tls_client_auth","client_secret_jwt"],"revocation_endpoint_auth_signing_alg_values_supported":["PS384","ES384","RS384","HS256","HS512","ES256","RS256","HS384","ES512","PS256","PS512","RS512"],"backchannel_logout_supported":true,"backchannel_logout_session_supported":true,"device_authorization_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/auth/device","backchannel_token_delivery_modes_supported":["poll","ping"],"backchannel_authentication_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/ext/ciba/auth","backchannel_authentication_request_signing_alg_values_supported":["PS384","ES384","RS384","ES256","RS256","ES512","PS256","PS512","RS512"],"require_pushed_authorization_requests":false,"pushed_authorization_request_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/ext/par/request","mtls_endpoint_aliases":{"token_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/token","revocation_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/revoke","introspection_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/token/introspect","device_authorization_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/auth/device","registration_endpoint":"http://100.123.0.30:8282/realms/softwlc/clients-registrations/openid-connect","userinfo_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/userinfo","pushed_authorization_request_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/ext/par/request","backchannel_authentication_endpoint":"http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/ext/ciba/auth"}}%

curl http://100.123.0.30:8282/realms/softwlc/protocol/openid-connect/certs
{"keys":[{"kid":"8_CtNfxzevMTzQDPaTJv-9GIWImz6YnVS9VQkK5_apU","kty":"RSA","alg":"RSA-OAEP","use":"enc","n":"tF3-KeVBG4TgJqFsHVeSKdJ-woayxcyvpCaYMNYh5tyaLfJFDt359ygh_SNiNxT6UFq76ortRIDhZNyI8abNFkMwHV2SqlEz2q9jVNSHRmOXdFCgr6VTqo-brHP-5lLMpRso8Z0HU7RQuZ55FrGHeNYeCSQ2SUpBcVZBK1GU8kpcawcJAtB1wsalExG9E-NLw4LSpjThKjLzQ1Ae9h1YlkId9ibyriWzGRcKtO8yPX-ZpBZY5klVTyqswzN8ZOKFe1_PCbHkVYPyD2V9L7gjmJhJvXAAAk3NGx-basQd1NsUaB6_nvsvguYIyPgMbDBd_RSBxyLocoizaecVdjG-XQ","e":"AQAB","x5c":["MIICnTCCAYUCBgGHDdoHkDANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdzb2Z0d2xjMB4XDTIzMDMyMzA5NDE0NVoXDTMzMDMyMzA5NDMyNVowEjEQMA4GA1UEAwwHc29mdHdsYzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALRd/inlQRuE4CahbB1XkinSfsKGssXMr6QmmDDWIebcmi3yRQ7d+fcoIf0jYjcU+lBau+qK7USA4WTciPGmzRZDMB1dkqpRM9qvY1TUh0Zjl3RQoK+lU6qPm6xz/uZSzKUbKPGdB1O0ULmeeRaxh3jWHgkkNklKQXFWQStRlPJKXGsHCQLQdcLGpRMRvRPjS8OC0qY04Soy80NQHvYdWJZCHfYm8q4lsxkXCrTvMj1/maQWWOZJVU8qrMMzfGTihXtfzwmx5FWD8g9lfS+4I5iYSb1wAAJNzRsfm2rEHdTbFGgev577L4LmCMj4DGwwXf0Ugcci6HKIs2nnFXYxvl0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAL/s1zEU9miFkHZOLwaUfLk9KXQQ5cjnyGrQPmxWJK/7tofNeVqrGu5G/7Cq3POCz/mbWFgttrUK3URZuP8nzaf0Ucg67UNx2wA89ZWdJRd1R2d9ltmKZGS35waynbl0AJmGtVliPt3B7g5moAKvyPpupx+bCizj2i9EeMAdN+UiXO32G5OCap327buJ45E3aLzNig0nRvpi+VHYkAlpN4Mpn7PcyMWAJRRduMZItfB8/GrOLsZEAg6AhQiZ4WpHX+WHY20mu45do9Hz3Asel2ZJmSsEhdTwv4X27gokISLK2apLIx9GRv+kY/HlMbrBHIecY2RFa0sGs33PCprc/6w=="],"x5t":"q1G1BEcHT1Md9WVzX75bSRZrnF4","x5t#S256":"KrZADcd_YoEh1ZpTcnmfMNvRHN12hUelWJFepoor40c"},{"kid":"u3XPhfmKtmFTmZKyURrbxdLHdaGW4w-bTUK3i3Ir82E","kty":"RSA","alg":"RS256","use":"sig","n":"qOarSr0zz98Dk2MyzlgXJ-Kzmu2pfk_fxNtYUKpDSsQK_GgMC6VhxxZd2UoQ0j7CRVYYtjtQUhAwjFhIiz6v1LsE6cAHR-IFul1cZcFI517vDcNw6a0ZMI1UdYo-_Kgj_SM9W7ejPkF6li5RaBcaw_ON2s-StS-AoJ7PqsOeLOCNwnobpez3tfYYaR3-m6WXLXV-3E9Dmq3t2oUceM-_hNucJWH8GbjTyUZntILWDYIVGP2d4SmTCnGQN2KrqdH8NSCEphvDx7-yMpCwdEZNldW0ssqSg7FQgqCWi8EOrQy5HD5QIJScSBis-kxD1DDQdz1WjTzvuSXEJ0IkprACTw","e":"AQAB","x5c":["MIICnTCCAYUCBgGHDdoFHjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdzb2Z0d2xjMB4XDTIzMDMyMzA5NDE0NFoXDTMzMDMyMzA5NDMyNFowEjEQMA4GA1UEAwwHc29mdHdsYzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKjmq0q9M8/fA5NjMs5YFyfis5rtqX5P38TbWFCqQ0rECvxoDAulYccWXdlKENI+wkVWGLY7UFIQMIxYSIs+r9S7BOnAB0fiBbpdXGXBSOde7w3DcOmtGTCNVHWKPvyoI/0jPVu3oz5BepYuUWgXGsPzjdrPkrUvgKCez6rDnizgjcJ6G6Xs97X2GGkd/pully11ftxPQ5qt7dqFHHjPv4TbnCVh/Bm408lGZ7SC1g2CFRj9neEpkwpxkDdiq6nR/DUghKYbw8e/sjKQsHRGTZXVtLLKkoOxUIKglovBDq0MuRw+UCCUnEgYrPpMQ9Qw0Hc9Vo0877klxCdCJKawAk8CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAPpz4w6rkQgc/wrbUQEXn885RhHJaCSV9NvviA7PFxrTmoLox9HFpX3ActV/a04hqHUSnw13Y5u4c3vlIPvBctikpPy3Ubv3GYlADX9iMvy0haWXy86MRsydg+TgyaX+rXYcryLYDDrrerhkJKT8dKc8b0E7i0pizyQtTFgZjZK8zDQ+s+YQ8do8jNKvbU4z5Ivqsx+RnAI1l/XYVvpPEsOvjHRCrG+1KL3hHJUjuFCkQxNhUv+hF7fFx5831zkpBYdarScehgE5Utdna7Ky0DlRA36ROS9XSORTvdyXgSmES06MoWpr66lNw8IboLpFcdIz8yBvr7IGA/+XtCrVHmg=="],"x5t":"mbAOAn-WUJFv9q_vJnEx0ZorMys","x5t#S256":"dhVbXsthWkGHD1i7SAIXy9LKWQ-mOJsrckgiYQpXg6U"}]}%

Так же проверить из браузера с ПК пользователя доступность сервера Keycloak.

В случае недоступности по указанным ссылкам сервера Keyclok необходимо провести диагностику сетевой связности, ограничения устанавливаемые файрволом на сети.

Примечание
В некоторых браузерах при возникновении ошибок в настройке взаимодействия приложений с Keycloak  может наблюдаться "белый экран", когда никакой ошибки в браузере не отображается. В этом случае следует смотреть логи соответствующего приложения.

Личный кабинет

Логи аутентификации пользователей сохраняются в файл "/var/log/eltex-wifi-cab/default.log".

1. Если при попытке аутентификации пользователя в логах наблюдаются ошибки вида:

Без форматирования
2023-04-04T19:12:00,928 [qtp1949709901-22666] ERROR default WiFiCustomerSsoServlet.handleGetUserInfoResponse(line:301). Attributes were not found or they are incorrect: [Eltex-User-Role]

то это говорит о том, что есть проблема с определенным атрибутом. Необходимо проверить его присутствие и корректность настройки в мапперах в "clients - wifi-cab", проверить настройки атрибутов группы и пользователя.

2. Если в логах наблюдается ошибка вида:

Без форматирования
2023-04-04T19:19:40,214 [qtp1949709901-20961] ERROR default WiFiCustomerSsoServlet.handleGetUserInfoResponse(line:301). Attributes were not found or they are incorrect: [Eltex-Domain]

и при этом атрибут "Eltex-Domain" везде настроен - необходимо проверить в настройках атрибута в мапперах "clients - wifi-cab" включено ли для него свойство "Multivalued".

3. Если в логах наблюдается ошибка вида:

Без форматирования
2023-04-04T19:24:05,122 [qtp1949709901-20961] ERROR default SsoKeycloakAccessControl.signIn(line:46). Authorization error message from NBI: Ошибка получения списка системных ролей
ERR209: Auth-роль 'default_platform_admin1' не существует

это означает, что выдаваемая пользователю системная роль не существует. Необходимо проверить значение атрибута "Eltex-User-Role" и соответствие его реально существующей роли в ЛК.

4. Если в логах наблюдается ошибка вида:

Без форматирования
2023-04-10T09:34:27,789 [qtp1201991394-33] ERROR default WiFiCustomerSsoServlet.authAfterRedirect(line:279). Failed with token request. Response: {"error_description":"Invalid client or Invalid client credentials","error":"unauthorized_client"}; code: 401

то необходимо проверить в файле настроек ЛК значение параметра "sso.clientSecret" - совпадает ли его значение со значение в настройке realm wifi-cab "Credentials" в поле "Client secret".

5. Если в логах наблюдается ошибка вида:

Без форматирования
2023-04-10T10:01:23,158 [qtp421293587-33] ERROR default WiFiCustomerSsoServlet.authAfterRedirect(line:279). Failed with token request. Response: {"error":"Protocol not found"}; code: 404

а в браузере пользователь сразу видит ошибку вида "The page isn't redirecting properly"  - необходимо проверить корректность параметра "sso.rest.getToken.path" в файле настроек ЛК: проверить правильность имени realm, наличие лишних символов.

Если пользователь видит данную ошибку после ввода логина / пароля на сервере Keycloak - необходимо проверить корректность параметра "sso.rest.getToken.path" в файле настроек ЛК: проверить правильность имени realm, наличие лишних символов.

6. Если при авторизации на странице Keycloak появляется ошибка вида:

Image Added

то необходимо проверить корректность значения параметров ЛК: "sso.redirectUri" и "sso.clientId". Так же необходимо проверить в настройках Keycloak во вкладке "Settings" для Client "wifi-cab" корректность параметра "Valid redirect URIs".

7. Если при авторизации на странице Keycloak появляется ошибка вида:

Image Added

то необходимо проверить корректность значения параметра "sso.auth.auth.path" - правильно ли указано имя Realm и внимательно проверить нет ли лишних символов. Если аналогичное сообщение возникает при выходе из ЛК - следует проверить корректность значения параметра "sso.auth.logout.path".

Конструктор порталов

Логи аутентификации пользователей сохраняются в файл "/var/log/eltex-portal-constructor/portal-constructor.log".

1. Если при попытке аутентификации пользователя в логах наблюдается:

Без форматирования
2023-04-04T19:32:50,697 [qtp1959910454-503] ERROR org.eltex.portal.admin.auth.sso.strategies.KeyCloakSsoAuthorization KeyCloakSsoAuthorization.authorize(line:111). Role not found or invalid. Check Eltex-User-Role attribute

то необходимо проверить наличие и корректность настройки маппинга атрибута в мапперах "clients - portal-constructor", проверить настройки атрибутов группы и пользователя.

2. Если в логах наблюдается ошибка вида:

Без форматирования
2023-04-04T19:37:43,466 [qtp1959910454-66] ERROR org.eltex.portal.admin.auth.sso.strategies.KeyCloakSsoAuthorization KeyCloakSsoAuthorization.authorize(line:136). There are no scopes for user or value is invalid. Check Eltex-Domain attribute

и при этом атрибут "Eltex-Domain" везде настроен - необходимо проверить в настройках атрибута в мапперах "clients - portal-constructor" включено ли для него свойство "Multivalued".

3. Если при попытке авторизации пользователь видит в браузере:

Image Added

а в логах КП наблюдаются сообщения вида:

Без форматирования
2023-04-10T11:05:38,654 [qtp1664576493-34] ERROR org.eltex.portal.admin.auth.sso.strategies.SsoAuthorization SsoAuthorization.getTokenPairByCode(line:119). org.springframework.web.client.HttpClientErrorException$NotFound: 404 Not Found: [{"error":"HTTP 404 Not Found"}]
2023-04-10T11:05:38,655 [qtp1664576493-34] ERROR org.eltex.portal.admin.auth.sso.strategies.SsoAuthorization SsoAuthorization.getUserInfoByAuthCodeFlow(line:149). Can't get token pair

то необходимо проверить корректность значения параметра настроек КП "sso_api_path": корректность имени используемого "Realm" (в приведенной инструкции "softwlc"), корректность введенной строки, отсутствие лишних символов.

4. Если при попытке авторизации пользователь видит в браузере ошибку из п.3., но при этом в лога наблюдается сообщение вида:

Без форматирования
2023-04-10T11:27:12,402 [qtp1664576493-34] ERROR org.eltex.portal.admin.auth.sso.strategies.SsoAuthorization SsoAuthorization.getTokenPairByCode(line:119). org.springframework.web.client.HttpClientErrorException$Unauthorized: 401 Unauthorized: [no body]
2023-04-10T11:27:12,402 [qtp1664576493-34] ERROR org.eltex.portal.admin.auth.sso.strategies.SsoAuthorization SsoAuthorization.getUserInfoByAuthCodeFlow(line:149). Can't get token pair

то необходимо проверить корректность значения параметра настроек КП "client_secret" и соответствие его настройке в Keycloak realm "wifi-cab" "Credentials" в поле "Client secret".

5. Если при попытке авторизации пользователь видит в браузере:

Image Added

и в логах КП наблюдаются сообщения вида:

Без форматирования
2023-04-10T11:12:11,724 [pool-2-thread-1] ERROR org.eltex.logging.client.LogServiceClient LogServiceClient.lambda$sendAsync$0(line:271). Failed to send message with code: UNAVAILABLE

то необходимо проверить корректность значения параметра настроек КП "authentication_path": корректность имени Realm, корректность введенной строки, отсутствие лишних символов.

Если данное сообщение наблюдается при выходе пользователя из КП - необходимо проверить корректность значения параметра настроек КП "logout_path".

6. Если при попытке авторизации пользователь видит в браузере:

Image Added

то необходимо проверить в настройках КП параметры "client_id" и "redirect_uri": соответствие параметра "client_id" используемому в настройках Keycloak имени client, корректность параметра "redirect_uri" и соответствие его настройке вкладке "Settings" Keycloak для "Client" "wifi-cab" параметр "Valid redirect URIs".

Eltex-EMS

Логи аутентификации пользователей сохраняются в файл "/var/log/eltex-ems/black_box.txt".

1. Если при попытке аутентификации пользователь видит:

Без форматирования
2023-04-05T19:02:56,077 [GuiHandler2v_0] INFO  Kernel ObjectHandler.handleCommand(line:215). Error: command = [ Command: action = AUTH_SSO_USER; objectType = SYSTEM; sessionId = -1; guiModuleId = null; clientInetAddress = 100.110.0.150; addToResponse = false; needLogs = true; function = Function{mode=USER, type=LOGIN, objId=-1, treeObj=null, tabName='AUTH_USER', methodName='AUTH_USER', description='Авторизация', object=null, processId='null', logs=null}; commandId = CMD:AUTH_SSO_USER_admin_SYSTEM_2023-04-05_19:02:55.345; additionalCommands.size = 0 ], пользователь не существует

то необходимо проверить наличие и корректность настройки маппинга атрибутов "User-Name" и  "Eltex-EMS-Role" в мапперах "clients - ems", проверить настройки атрибутов группы и пользователя.

2. Если в логах наблюдается ошибка:

Без форматирования
2023-04-05T19:14:32,479 [GuiHandler2v_0] INFO  Kernel ObjectHandler.handleCommand(line:215). Error: command = [ Command: action = AUTH_SSO_USER; objectType = SYSTEM; sessionId = -1; guiModuleId = null; clientInetAddress = 100.110.0.150; addToResponse = false; needLogs = true; function = Function{mode=USER, type=LOGIN, objId=-1, treeObj=null, tabName='AUTH_USER', methodName='AUTH_USER', description='Авторизация', object=null, processId='null', logs=null}; commandId = CMD:AUTH_SSO_USER_admin_SYSTEM_2023-04-05_19:14:32.418; additionalCommands.size = 0 ], Аутентификация из GUI роли SuperUser1

то необходимо проверить соответствие системной роли выдаваемой пользователю в настройках Keycloak и ее наличия в EMS.

3. Если при попытке зайти пользователь видит:
Image Added

то необходимо проверить корректность настройки параметра в конфигурации EMS "sso.keycloak.realm" и "sso.keycloak.resource" на соответствие их используемых в Keycloak "Realm" и ""Client (в приведенной инструкции "softwlc" и "ems").

Так же необходимо проверить, что все апплеты предыдущих попыток аутентификации на ПК пользователя закрыты.

4. Если при попытке зайти в EMS в браузере открывается страница Keycloak, но в ней отображается ошибка вида:

Image Added

то необходимо проверить корректность настройки параметра EMS "sso.keycloak.resource" и соответствие его используемому в Keycloak "Realm - Client" (в приведенной инструкции "ems").

Eltex-radius-NBI

Логи аутентификации сохраняются в файл "/var/log/eltex-axis/radius-nbi/nbi_error.log".

Взаимодействие с данным сервисом выполняются ЛК, КП и EMS. Он не имеет своего client в keycloak, поэтому при возникновении ошибок необходимо в первую очередь проверить корректность настроек приложений, которые обращаются к нему.

1. Если в приведенном ниже логе:

Без форматирования
2023-04-05T19:29:49,831 [http-nio-8080-exec-10] ERROR Kernel Northbound.handle(line:246). Failed. commander GetAuthRoleCmd; request [AUTH_ROLE: test223, CLIENT_NAME: test tester, LOCALE: ru_RU, CLIENT_IP: 100.123.0.2]
org.eltex.radius.nbi.exception.EltexException: Auth-роль 'test' не существует

то необходимо проверить присутствие и корректность настройки в мапперах атрибута "Eltex-User-Role" в "clients - wifi-cab", так же проверить настройки данного атрибута в группе пользователя и его наличие данной роли в ЛК.

2. Если в логах наблюдается ошибка вида:

Без форматирования
2023-04-10T13:37:01,039 [http-nio-8080-exec-9] ERROR Kernel SSOTools.handleGetUserInfoResponse(line:51). Failed with user info request. Response: {"error":"HTTP 404 Not Found"}; code: 404

то необходимо проверить корректность значений параметров "sso.rest.getToken.path" и "sso.rest.getUserInfo.path": корректность Realm, корректность параметров в целом, отсутствие лишних символов.

Приложения

Таблица атрибутов пользователей, используемых SoftWLC

НазваниеПрименениеОбязательностьИспользование
User-NameПередача имени пользователяДаЛК/КП/NBI/EMS
Eltex-User-RoleПередача роли пользователядаЛК/КП/NBI
Eltex-DomainПередача домена пользователяДаЛК/КП/NBI
Eltex-User-TimezoneПередача таймзоны пользователя

Да - для ЛК

Нет - для КП

ЛК/КП/NBI
Eltex-EMS-RoleПередача роли в EMSДаEMS
Eltex-EMS-ResendTrapНастройка профайла пользователя:
Пересылать аварии на Email
необязательный аттрибут
НетEMS
Eltex-EMS-SendLogsНастройка профайла пользователя:
Пересылать логи на Email
необязательный аттрибут
НетEMS
Eltex-EMS-SendOntProblems

Настройка профайла пользователя:

Пересылать проблемы ONT на Email

необязательный аттрибут
НетEMS
Eltex-EMS-IpList

Настройка профайла пользователя:

IP

адреса

-адрес для режима

'

"multiuser

'

"

необязательный аттрибутEltex-User-Timezone

Отвечает за таймзону пользователя. Участвует в планировщике отчетов и отображении времени.

При настройке для пользователя должен иметь строковый формат вида Asia/Krasnoyarsk

Да.

обязательный атрибут для ЛК/NBI

необязателен, но желателен для КП

Возможные проблемы при настройке

Авторизация в keycloak проходит, а в EMS нет (Ошибка - пользователя не существует).

Встречалась при первоначальной настройке.

Проблема заключается в том, что в токене не приходит роль пользователя.

Необходимо пересоздать маппер Eltex-EMS-Role

HTTPS required

Чтобы не было проблемы "HTTPS required" надо в реалме указывать в настройке "Require SSL" None. По умолчанию стоит "External requests".

НетEMS