НАСТРОЙКА АУТЕНТИФИКАЦИИ ЧЕРЕЗ 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].