Интеграция с KeyCloak
В данном руководстве предполагается, что KeyCloak-сервер уже развернут и настроен.
Общие положения
Во флаговый энум типов авторизации (параметр Auth:Type конфигурационного файла WebApi) добавились значения KeyCloak1 = 8 (сокращенный флоу) и KeyCloak2 = 16 (полный флоу с PKCE). При наличии этого флага на форме авторизации отобразится кнопка «Войти с учетной записью KeyCloak». Использовать одновременно оба флага не рекомендуется.
-
Сначала потребуется создать Realm: для этого нужно войти в Administration Console на главной странице KeyCloak с правами администратора.
Главная страница KeyCloak
Форма авторизации в Administration Console -
Нажимаем кнопку «Create Realm» и вводим параметры нового Realm:
Кнопка «Create Realm»
Форма создания Realm -
После создания нового Realm система автоматически переключит на него:
Новый RealmЭтот параметр будет использоваться при настройке конфигурационного файла службы WebApi:
Настройка Realm в конфигурационном файле службы WebApi -
Далее создаем Client – переходим на форму «Clients» со списком клиентов и нажимаем кнопку «Create Client»:
Форма «Clients» -
В мастере создания Client на первом шаге задаем
ClientID,NameиDescription:
Мастер создания Clients, шаг 1Параметр ClientID будет использоваться при настройке конфигурационного файла службы WebApi:
Настройка ClientId в конфигурационном файле службы WebApi -
В мастере создания Client на втором шаге включается «Client authentication» и «Authorization», остальные по умолчанию:
Мастер создания Clients, шаг 2 (включение «Client authentication» и «Authorization») -
На вкладке «Credentials» у созданного Client нужно скопировать значение параметра «Client secret», зашифровать его утилитой шифрования паролей, и добавить в конфигурационный файл службы WebApi:
Копирование Client secret
Шифрование Client secret утилитой Primo.Orchestrator.PasswordEncryptor
Настройка ClientSecret в конфигурационном файле службы WebApi -
Для типа авторизации KeyCloak2 = 16 нужно в конфигурационном файле WebApi настроить (только IP и порт)
RedirectUrl, и скопировать его в «Valid redirect URIs» для Client:
Настройка RedirectUrl в конфигурационном файле службы WebApi
«Valid redirect URIs» для Client -
Встроенной учетной записи, ассоциированной с Client –
service-account-orch– надо добавить административные роли. Открыть вкладку «Users», выбрать пользователяservice-account-orch, открыть вкладку «Role mapping» и установить фильтр «Filter by clients» и выбрать ролиmanage-users,manage-realm,realm-admin:
Вкладка «Users»
Вкладка «Role mapping»
Выбор роли «manage-realm» -
Далее нужно настроить роли пользователей, которые будут использованы для сопоставления с ролями Оркестратора. Переходим на вкладку «Realm roles»:
Вкладка «Realm roles» -
Добавляем роли с префиксом «orch-», чтобы по том по нему производить поиск:
Добавление роли
Список ролей, отфильтрованный по префиксу «orch-» -
Дальше создаем пользователей, которые будут авторизоваться в Оркестраторе. Переходим на вкладку «Users»:
Вкладка «Users» -
Создаем пользователя Оркестратора, сразу включаем «Email verified»:
Создание пользователя Оркестратора -
Устанавливаем созданному пользователю пароль. Переходим на вкладку «Credentials»:
Вкладка «Credentials»Назначаем пароль, сразу отмечаем его постоянным – отключаем «Temporary»:
Назначение пароля пользователю -
Ассоциируем пользователя с ранее созданными ролями для Оркестратора:
Ассоциирование пользователя с ролями для ОркестратораЧтобы авторизация работала, необходимо чтобы эти роли средствами Оркестратора были связаны с ролями Оркестратора:
Связь ролей KeyCloak с ролями Оркестратора -
В конфигурационном файле службы WebApi прописываем URL-адрес
порт KeyCloak-сервера:
Настройка адреса KeyCloak-сервера в конфигурационном файле службы WebApiЕсли задан
СonfigurationUrl, тоAuthUrl,TokenUrlиLogoutUrlзаполняются на основе ответа этого эндпоинта, и их можно оставить пустыми/удалить из конфигурационного файла службы WebApi.
Параметр KeycloakTokenRolesSource
Параметр KeycloakTokenRolesSource определяет источник, откуда в Keycloak-токене будут извлекаться роли:
KeycloakTokenRolesSource = 0 (Realm – KeyCloak[orch])
Пользователю назначаются роли из Realm:
Роли в Realm «orch»
Соответствующая настройка в конфигурационном файле:
Настройка в конфигурационном файле для KeycloakTokenRolesSource = 0
KeycloakTokenRolesSource = 1 (Client совпадает с KeyCloak[orch].ClientId)
Пользователю назначаются роли из Client:
Роли в Client «orch»
Соответствующая настройка в конфигурационном файле:
Настройка в конфигурационном файле для KeycloakTokenRolesSource = 1
KeycloakTokenRolesSource = 2 (Другой Client совпадает с KeyCloak[orch].RoleClientId)
Пользователю назначаются роли из другого Client:
Роли в Client «orch2»
Соответствующая настройка в конфигурационном файле:
Настройка в конфигурационном файле для KeycloakTokenRolesSource = 2
Пользователю могут одновременно быть назначены в Keycloak роли из всех трех источников ролей, но читаться из токена будут только роли для конкретного значения KeycloakTokenRolesSource:
Роли в Realm «orch» и Client «orch» и «orch2»
Обход запрета/отключения административных эндпоинтов
Эндпоинты RealmRolesUrl, ClientsUrl, ClientRolesUrl, UsersUrl, GroupsUrl являются административными:
RealmRolesUrlиспользуется приKeycloakTokenRolesSource = 0для настройки маппинга ролей Keycloak и ролей ОркестратораClientsUrl,ClientRolesUrlиспользуются приKeycloakTokenRolesSource = 1и приKeycloakTokenRolesSource = 2для настройки маппинга ролей Keycloak и ролей ОркестратораUsersUrlиспользуется приDisableUserCheck = falseдля проверки наличия пользователя в KeycloakGroupsUrlзарезервирован, в текущей версии Оркестратора не используется
В случае запрета/отключения административных эндпоинтов требуется установить параметры Roles и DisableUserCheck (по умолчанию выключены/закомментированы):
Параметры Roles и DisableUserCheck
Параметры Roles и DisableUserCheck применяются независимо от KeycloakTokenRolesSource:
Roles– массив ролей из соответствующегоKeycloakTokenRolesSource. Например, дляKeycloakTokenRolesSource = 0это должен быть массив ролей из Realm. Регистр имеет значение.DisableUserCheck = true– отключение проверки наличия пользователя в Keycloak. Отключение проверки наличия пользователя в Keycloak ведет к деградации функциональности системы, так как теперь эта проверка ложится на пользователя Оркестратора.