НАСТРОЙКА АУТЕНТИФИКАЦИИ ЧЕРЕЗ KEYCLOAK Инструкция подготовлена на примере Keycloak версии 20.0.2.
Терминология
-
Authentication — идентификация и проверка пользователя.
-
Authorization — предоставление доступа пользователю.
-
Realm — пространство для управления пользователями, приложениями, ролями и группами. Пользователь принадлежит к конкретному realm. Realm’ы изолированы друг от друга.
-
Clients — клиенты (приложения), которые могут обращаться к Keycloak для аутентификации пользователя. Чаще всего клиентами являются приложения и службы, которые используют Keycloak для обеспечения единого входа в систему.
-
Users — пользователи, которые могут войти в вашу систему. Им можно назначить членство в группе и/или определенные роли.
-
Roles — определяют тип/категорию пользователя. Читатель, писатель — типичные роли. Обычно, приложения назначают доступ и разрешения конкретным ролям, а не отдельным пользователям.
Приложения Визиона требующие клиентов
-
Vision Core
-
Grafana
Для каждого приложения необходимо создать клиента.
1.1 Создание клиента#
Выберите необходимый Realm, перейдите страницу Clients и нажмите на кнопку Create client, после чего укажите следующие параметры.
-
Client type: openid-connect
-
Client ID: <ИМЯ КЛИЕНТА>
-
Vision Core: vision-core-client
-
Grafana: vision-grafana-client
После ввода параметров нажмите Next.
-
-
Client authentication: ON
-
Authorization: OFF
-
Standard Flow: ON
-
Direct Access Grants: ON
-
Implicit Flow: OFF
После ввода параметров нажмите Save.
1.2 Параметры клиента#
После создания клиента откроется страница Client details.
Вкладка «1.2.1 Settings»
Необходимо указать адреса приложения.
- Root URL:
<root_url>
- Home URL (Base URL в ранних версиях):
<root_url>
- Valid Redirect URIs:
- Vision Core:
<root_url>/vision/api/v1/auth/login
- Grafana:
<root_url>/login/generic_oauth
- Vision Core:
- Web Origins:
<root_url>
- Admin URL:
<root_url>
<root_url>:
-
для Vision Core:
https://<ip_vision_vm>:8092
-
для Grafana:
https://<ip_vision_vm>/vision/grafana
При доступности приложений с нескольких
<root_url>
(по IP, по домену) укажите все допустимые варианты для Valid redirect URIs и Web Origins.Прочие параметры конфигурации можно оставить со значениями по умолчанию.
После ввода параметров нажмите Save.
1.2.2 Вкладка «Client scopes» (Mappers в ранних версиях):
Для клиента Grafana требуется добавить поля с ролями клиента в токен идентификатора (id token) и в информацию о пользователе (user info).
- В таблице кликните по ссылке вида
<YOU-CLIENT-ID>
-dedicated - На открывшейся странице нажмите Configure a new mapper
- В списке выберите категорию User Client Role
- На странице Add mapper укажите параметры:
-
Name: roles
-
Client ID:
<YOU-CLIENT-ID>
-
Client Role prefix: <оставить-пустым>
-
Multivalued: ON
-
Token Claim Name: roles
-
Claim JSON Type: String
-
Add to ID token: ON
-
Add to access token: OFF
-
Add to userinfo: ON
После ввода параметров нажмите Save.
-
1.2.3 Вкладка Roles
Необходимо создать роли клиента, которые затем можно пользователям Keycloak для доступа к приложениям. Имена ролей чувствительны к регистру. Для создания роли нажмите Create role.
В клиенте для Vision Core создайте следующие роли:
Role name | Description |
---|---|
writer | Полный доступ |
reader | Только чтение |
В клиенте для Grafana:
Role name | Description (необязательно) |
---|---|
grafanaadmin | Server administrator |
admin | Admin |
editor | Editor |
viewer | Viewer |
1.2.4 Вкладка «Credentials»
По-умолчанию на данной вкладке должны быть указаны следующие параметры
-
Client Authenticator: Client Id and Secret
-
Client secret: *****
При конфигурации приложений нам понадобятся следующие данные клиентов:
-
Client ID
-
Client secret
1.3 Назначение ролей пользователям#
- Откройте раздел Users
- Выберите необходимого пользователя или создайте нового.
- Перейдите во вкладку Role mapping и нажмите Assign role
- Нажмите на выпадающий список фильтра и выберите Filter by clients
- Отметьте необходимые роли и нажмите Assign
1.4 Конфигурация Визиона для работы с Keycloak#
В директории с дистрибутивом необходимо запустить плейбук server_config_auth.yml с inventory-файлом со следующим содержимым:
inventory.yml
all:
hosts:
# Визион Server
vision_server:
# IP Vision VM
ansible_host: ">>> REPLACE ME! <<<"
# default ssh user/pass (can be overridden below)
ansible_user: root
ansible_ssh_pass: ">>> REPLACE ME! <<<"
# ansible_ssh_pass ИЛИ путь до файла приватного ключа:
# ansible_ssh_private_key_file: ">>> REPLACE ME! <<<"
# default user/pass for become
ansible_become_user: root
ansible_become_password: ">>> REPLACE ME! <<<"
auth:
# URL Keycloak, например https://192.168.186.1:8080
auth_server: ">>> REPLACE ME! <<<"
# Имя Realm
realm: ">>> REPLACE ME! <<<"
core:
# Параметры Keycloak клиента Vision Core
client_id: "vision-core-client"
client_secret: ">>> REPLACE ME! <<<"
grafana:
# IP Vision VM
domain: ">>> REPLACE ME! <<<"
# Базовая аутентификация Grafana
admin_user: "admin"
admin_password: "skala-r"
# Параметры Keycloak клиента Grafana
client_id: "vision-grafana-client"
client_secret: ">>> REPLACE ME! <<<"
Команда запуска плейбука ansible-playbook -i inventory.yml server_config_auth.yml
После успешного выполнения команды перейдите на посадочную страницу Визиона https://<ip_vision_vm>
и проверьте, что при попытке открыть разделы Аналитические панели и Модуль администратора доступна аутентификация через Keycloak.
При необходимости, параметры аутентификации и авторизации могут быть скорректированы в файлах конфигурации на сервере Визиона
- Vision Core:
/opt/skala-r/vision/server/vision_core/etc/config.ini
в секциях [AUTH] и [GRAFANA]. - Grafana:
/opt/skala-r/vision/server/grafana/etc/grafana.ini
в секции [auth.generic_oauth].