Настройка аутентификации через FAM Avanpost

Инструкция подготовлена на примере FAM Avanpost v1.10.10.379

Терминология

  • Authentication (Аутентификация) — идентификация и проверка пользователя.
  • Authorization (Авторизация) — предоставление доступа пользователю.
  • Приложение — сущности, которые могут обращаться к Avanpost для аутентификации пользователя. Чаще всего ими являются приложения и службы, которые используют Avanpost для обеспечения единого входа в систему.
  • Пользователи — субъекты которые могут войти в вашу систему. Им можно назначить членство в группе и/или определенные роли.
  • Роли — определяют тип/категорию пользователя. Читатель, писатель — типичные роли. Обычно, приложения назначают доступ и разрешения конкретным ролям, а не отдельным пользователям.

1. Создание клиента#

Перейдите на страницу Приложения и нажмите кнопку Добавить приложение, после чего укажите следующие параметры:

  • Наименование - название для отображения в интерфейсе Avanpost
  • Тип - Open ID

После ввода параметров нажмите Далее. Введите данные:

  • Secret - “Пароль” для приложения
  • Redirect URIs - через пробел допустимые адреса для перенаправления:
    • <app_url>/vision/api/v1/auth/login
    • <app_url>/vision/api/v1/auth/login-grafana
  • Base URL - <app_url>. Адрес приложения
  • Logout URL - не заполняется

Где <app_url>, это - https://<ip_vision_vm>

При доступности приложений с нескольких <app_url> (по IP, по домену) укажите все допустимые варианты для Redirect URIs.

После ввода параметров нажмите Далее.

Выберите процесс аутентификации, по умолчанию Password.

После ввода параметров нажмите Далее.

Оставьте флажок “Сделать приложение активным” и нажмите Сохранить.

**2. Настройка приложений и ролей#

В странице “Приложения” перейдите в “Настройки”, после нажмите на кнопку изменения настроек и измените следующие параметры:

  • ID synonym - синоним, который можно использовать вместо Client ID (опционально)
  • Post logout redirect URIs - <app_url>
  • Allowed grant types - необходимо включить: 
    • Authorization code
    • Resresh token
  • Access token type - JSON web token

Ошибки аутентификации - снять флаг “Обрабатывать как ошибки протокола”. Необходимо для случаев, когда в Визион пытается зайти пользователь без соответствующих прав.

После нажмите Сохранить.

В разделе “Модель доступа” добавьте объект доступа.

  • Код - Client ID или ID synonym, если был указан. Необходимо использовать только тот вариант, который потом будет использован в конфиге vision core (параметр auth: client_id)
  • Описание - Права доступа
  • Права (Scopes) - записи по количеству ролей, где:
    • Код - название роли
    • Описание - описание роли, отображаемое в интерфейсе Аванпоста

Добавьте роли с теми названиями, которые будут использованы в Визион. Для ролей администраторов - obj_model для администратора объектной модели, role_model для администратора информационной безопасности, vsn_config для администратора конфигурации Визиона (он же администратор Grafana). Также можно создать пользовательские роли. Подробнее управление ролевой моделью Визион описано в Руководстве Администратора .

Нажмите Сохранить.

В разделе “Сервис” в “Настройка ролей и прав” нажмите кнопку Добавить и заполните следующие значения:

  • Наименование - имя роли для интерфейса аванпоста
  • Описание - опционально

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

Далее перейдите в созданную роль. Во вкладке “Пользователи” добавьте пользователей к этой роли:

Перейдите в раздел “Группы” и добавьте группу (для создания связи между пользователем и приложением). Заполните поля:

  • Наименование - наименование клиента
  • Описание - опционально

Нажмите Сохранить.

На странице группы во вкладках: 

  • Пользователи - добавьте пользователей, которые должны иметь доступ к приложению, независимо от роли.
  • Приложения - назначьте созданное ранее приложение.

Примечание. Необходимо добавление пользователей в группу lk-client для предоставления им доступа к личному кабинету (Avanpost). Это необходимо в случае, когда в Визион пытается зайти пользователь без соответствующих прав.

3. Настройка конфигурации#

В конфигурационный файл /opt/skala-r/etc/vision/server/vision_core/config.yml необходимо внести следующие изменения.

В ключе “auth” необходимо указать:

  • enabled - установить значение true
  • auth_type: ‘avanpost’
  • auth_server - URL Anapost, например “http://fam.skala-r.tech
  • client_id - Client ID/ID synonym. Если при настройке использовался ID synonym - указывать его
  • client_secret - значение является ключом из хранилища секретов. Не изменять.
  • tls_insecure_skip_verify - пропуск проверки tls сертификатов.

Пример секции авторизации:

auth:
  enabled: true
  auth_type: avanpost
  auth_server: http://fam.skala-r.tech
  client_id: vision
  client_secret: vault.auth.client_secret
  tls_insecure_skip_verify: true

Необходимо указать реальное значение Client secret клиента.

  1. Сделайте копию файла хранилища секретов: cp /opt/skala-r/vision/.secrets_vault /opt/skala-r/vision/.secrets_vault_bak.
  2. Откройте хранилище секретов командой: ansible-vault edit /opt/skala-r/vision/.secrets_vault. Для оперирования содержимым хранилища требуется ключ, выдаваемый разработчиком Визиона.
  3. Для ключа vault.auth.client_secret установите значение Client secret из раздела Credentials клиента.
  4. Сохраните файл и перезапустите сервис vision_core.service командой: systemctl restart vision_core.service.
  5. Проверьте успешный запуск vision_core командой: systemctl status vision_core.service и убедитесь, что в логе нет ошибок после перезапуска: journalctl -fu vision_core -n 20.

Примечание. Действия пользователя при попытке войти в Визион без соответствующих прав.

При выполнение настроек, описанных выше, если пользователь без соответствующих прав попытает аутентифицироваться в Визион через Avanpost, он получит окно с сообщением “Ошибка доступа”. Для получения возможности повторной аутентификации ему необходимо перейти в личный кабинет (соответствующая ссылка будет отображена вместе с сообщением об ошибке) и завершить сессию, нажав Выход.

Примечание. Отключение функции регистрации и восстановления пароля.

В версии Avanpost FAM v1.10.10.379 отключение Регистрации на странице аутентификации пользователя осуществляется через конфигурационный файл Avanpost, пример пути конфигурационного файла /opt/idp/config.toml:

[selfregistration]
redirectUrl = 'https://<your_redirect_URL_after_registration>'
disabled = false

Функция Восстановления пароля в данной версии отключается через редактирование шаблона страницы аутентификации. 

Описание кастомизации пользовательских интерфейсов - указаны шаги, как редактировать шаблоны. В шаблоне login.password.html можно удалить/закомментировать следующий блок:

[{if ne .Username ""}]
<div class="field">
<a href="[{$path}]/user/restore_password?request_id=[{.RequestID}]">
  [{.ForgotPassword}]
</a>
</div>
[{else}]
<div class="field">
<a href="[{$path}]/user/restore_password?request_id=[{.RequestID}]">
  [{.ForgotPassword}]
</a>
</div>
[{end}]