Компонент Avanpost ADFS Plugin — серверный компонент Avanpost FAM, предназначенный для решения задачи аутентификации посредством использования плагина ADFS.
Компонент обеспечивает следующие функции:
- Двухфакторная/многофакторная аутентификация в режиме графической оболочки;
- Двухфакторная/многофакторная аутентификация при подключении по SSH.
При установке в ADFS-плагина аутентификации его возможно подключить к Avanpost FAM в качестве отдельного приложения, управляя сценарием аутентификации.
В данной статье рассмотрен вопрос настройки для механизма аутентификации посредством использования плагина ADFS.
К моменту осуществления настройки должны быть выполнены следующие требования:
- На сервере установлена и настроена AD, а также заведены пользователи, состоящие в группах, которым предоставлен доступ к соответствующему OIDC-приложению (приложение
ADFS
в данном примере) на стороне Avanpost FAM Server. - Выполнены требования к службам федерации AD.
- На сервере должно быть установлено корректное время.
Настройка на стороне FAM Server
Настройку компонента в интерфейсе административной консоли Avanpost FAM Server необходимо выполнить следующим образом:
- Зайти во вкладку создания приложения, нажав кнопку "Добавить приложение" в сервисе "Приложения".
На этапе "Основные настройки" требуется ввести наименование (
ADFS
в данном примере) и выбрать тип OAuth/Open ID Connect (более подробно процесс создания и управления приложениями описан в разделах Управление приложениями и Управление OpenID Connect-приложениями).На этапе "Настройки интеграции" необходимо установить настройки приложения (более подробно описано в Шаг 2. Настройки интеграции для OIDC-приложения) Обязательно требуется задать значения параметров в графе
Secret (
произвольный секретный ключ, который будет использоваться для подключения к приложению) ,Base URL
иRedirect URIs
(в качестве значенийBase URL
иRedirect URIs
следует использовать корневой домен AD FS, напримерhttps://adfs.server.ru
).Администратор может сменить секретный ключ (например, при компрометации ключа) в профиле созданного приложения во вкладке "Настройки" в разделе "Смена секрета". Секретный ключ должен совпадать с тем, который задается в конфигурационном файле на сервере ADFS (значение
Secret
).- На этапе "Настройки аутентификации" выбрать факторы аутентификации приложения, установив переключатели напротив тех или иных факторов (более подробно описано в Шаг 3. Настройки аутентификации для OIDC-приложения).
- На этапе "Завершение" установить флажок "Сделать приложение активным" и сохранить (более подробно описано в Шаг 4. Завершение для OIDC-приложения).
- В режиме "Приложения" найти созданное приложение и перейти в его профиль.
- Во вкладке "Настройки" в разделе "Настройки интеграции" убедиться, что в графе
Allowed grant types
переключать выставлен в положение - Создать группу (если таковая отсутствует), пользователи которой будет аутентифицироваться при помощи компонента ADFS Plugin. Для этого необходимо нажать кнопку "Добавить группу" в режиме "Группы" и в открывшейся вкладке ввести запрашиваемые параметры (более подробно о настройке группы описано в разделе Управление доступом).
- Добавить в группу пользователей, которые будут аутентифицироваться при помощи ADFS Plugin (более подробно о добавлении пользователей в разделе Управление пользователями).
- Предоставить группе доступ к созданному приложению: в профиле группы зайти во вкладку "Приложения", найти созданное OIDC-приложение (
ADFS
в данном примере) и перевести переключать напротив него в положение - Внести на машине, где установлен Avanpost FAM Server, в файл настроек nginx (стандартное расположение файла конфигурации в ОС LInux:
/etc/nginx/nginx.conf
) следующий фрагмент конфигурации , позволяющий использовать содержимое FAM в качестве iframe:location / { proxy_pass http://127.0.0.1:4008; add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' https://fs.test.dom"; add_header X-Content-Type-Options 'nosniff'; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
Установка и настройка на стороне AD FS
- Скачать и распаковать на рабочую машину актуальную версию Avanpost ADFS Plugin из репозитория.
- Из корня папки распакованного архива открыть для редактирования конфигурационный файл
App.config
. - Настроит конфигурационный файл
App.config
согласно приложению А. При этом значения параметровRedirect URL
иclientid
следует скопировать из профиля созданного OIDC-приложения (вкладка "Настройки, параметрыRedirect URIs
иClient ID
соответственно)". - Запустить Windows PowerShell от имени администратора.
- От имени администратора выполнить скрипт
install.cmd
и установить ADFS Plugin.Для корректной установки требуется выполнять скрипты от имени администратора.
- Запустить Панель управления ADFS.
- В панели управления ADFS перейти в раздел "Служба" на вкладку "Методы проверки подлинности", выбрать "Изменить Методы многофакторной проверки подлинности" и включить метод "Avanpost" на вкладке "Дополнительно".
- Запустить скрипт
applyCSP.cmd
для применения настроек Content-Security-Policy (Политику безопасности контента) для AD FS.
Допускается осуществить настройку политики безопасности контента (CSP) при помощи нижеперечисленных команд. Для этого следует сохранить данный код в файл скрипта Content-Security-Policy.ps1
и запустить, используя PowerShall (PowerShell.exe → ExecutionPolicy Bypass → File Content-Security-Policy.ps1):
# Задать URL сервера FAM (в качестве URL следует указывать адрес развернутого FAM Server) $url = "https://fam.apidp.ru/" # Получить информацию о текущей политике Content-Security-Policy: $CSP = ((Get-AdfsResponseHeaders | Select -ExpandProperty ResponseHeaders).'Content-Security-Policy') # В случае, если в текущей CSP присутствуют настройки, добавить дополнительные директивы if (-not ([string]::IsNullOrEmpty($CSP))) { $CSP += "; " } $CSP += "default-src 'self' 'unsafe-inline' 'unsafe-eval' " + $url + "; frame-src 'self' " + $url + "'; img-src 'self'" + $url # Установить новую политику CSP Set-AdfsResponseHeaders -SetHeaderName Content-Security-Policy -SetHeaderValue $CSP # Включить CORS (Cross-origin resource sharing), чтобы иметь возможность получать сообщения от других доменов через iframe Set-AdfsResponseHeaders -EnableCORS $true # Добавить URL FAM в доверенные источники Set-AdfsResponseHeaders -CORSTrustedOrigins $($url)
Проверка настройки
Проверку корректности настройки Avanpost ADFS Plugin выполнять следующим образом:
- Запустить PowerShell
- Выполнить команду для получения текущей политики безопасности контента (Content Security Policy, CSP) в службе федерации Active Directory (AD FS):
(Get-AdfsResponseHeaders | Select -ExpandProperty ResponseHeaders).'Content-Security-Policy'
- Просмотреть наличие записи типа
frame-src 'self' https://<FAM_Server>
(вместоhttps://<FAM Server>
указать адрес настроенного FAM Server). - При отсутствии записей из предыдущего пунка проверить текущие настройки CORS при помощи команды:
Get-AdfsResponseHeaders
Чтобы убедиться, что CORS включен и настроен верно, убедиться, что нижеперечисленным параметрам присвоены следующие значения:
CORSEnabled : True
;CORSTrustedOrigins : {https://<FAM_Server>}
(вместоhttps://<FAM Server>
должен быть указан адрес настроенного FAM Server).
- В противном случае следует проверить настройки nginx FAM Server, в которых должна присутствовать запись, подобная нижеприведенной (правила загрузки ресурсов, изображений, стилей. правила подключения, выполнения скриптов, встраивания фреймов):
add_header Content-Security-Policy "default-src 'self'; img-src * 'self' data: https:; style-src * 'self' 'unsafe-inline'; connect-src * 'self'; script-src * 'self'; frame-src 'self' https://<FAM_Server>;";
- Установить правило, позволяющее использовать дополнительные факторы аутентификации для интранета:
Set-AdfsAdditionalAuthenticationRule AdditionalAuthenticationRules 'c:[type == "http://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", value == "true"] => issue(type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", value = "http://schemas.microsoft.com/claims/multipleauthn" );'
- От имени администратора выполнить команду включения страницы входа (
https://adfs.apidp.ru/adfs/ls/idpinitiatedsignon.htm
), инициированного поставщиком удостоверений (IdP):Set-AdfsProperties -EnableIdPInitiatedSignonPage $true
- Открыть тестовую страницу
https://adfs.apidp.ru/adfs/ls/idpinitiatedsignon.htm
в браузере. - Ввести учетные данные (логин и пароль) в окне ввода учетных данных.
- Убедиться, что появилось сообщение об успешной авторизации.
- Пройти аутентификацию по второму фактору (зависит от настроек процесса аутентификации для группы, в которой состоит пользователь) во всплывающем окне.
- Убедиться, что аутентификация прошла успешно.
Ошибки, связанные с работой компонента, записываются на сервере ADFS в Журнал событий Windows (Event Viewer). Для просмотра логов следует войти в секцию Applications and Services Logs. Затем перейти в раздел AD FS, подраздел AD FS/Admin, Источник (Source): Avanpost.
Если не прогружается iframe с окном второго фактора, то необходимо добавить домен в исключения политики безопасности содержимого, разрешив ему открываться во фрейме.
Это можно сделать следующей PowerShell командой, запущенной от роли администратора:
Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; frame-src *"
Также эту команду следует выполнить, если появляется ошибка следующего содержания:
Refused to frame 'https://____.ru/' because it violates the following Content Security Policy directive: "default-src 'self'". Note that 'frame-src' was not explicitly set, so 'default-src' is used as a fallback."
Обновление компонента
В процессе использования компонента может возникнуть потребность в обновлении компонента до более свежей версии или изменении параметров конфигурационного файла App.config
. Обновление/внесение изменения необходимо осуществлять следующим образом:
- Запустить панель управления ADFS.
- Перейти на вкладку "Методы проверки подлинности", выбрать "Изменить Методы многофакторной проверки подлинности" и выключить метод "Avanpost" (убрать флаг) на вкладке "Дополнительно".
- Запустить Windows PowerShell от имени администратора.
- Выполнить команду
remove.cmd
из папки архива от имени администратора, дождаться запроса на удаление и подтвердить удаление (нажать "y"). - Загрузить обновленный модуль/изменить файл конфигурации согласно разделу Установка и настройка данной инструкции. Для настройки параметров конфигурационного файла использовать приложение А.
- Выполнить команду
install.cmd
от имени администратора. Получить сообщения об ожидании остановки службы ADFS. - В панели управления ADFS перейти на вкладку "Методы проверки подлинности", выбрать "Изменить Методы многофакторной проверки подлинности" и включить метод "Avanpost" на вкладке "Дополнительно".
- Убедиться, что компонент работает корректно: успешно пройти аутентификацию.
Приложение А Параметры конфигурационного файла App.config
Пример и таблица параметров файла App.config
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <!-Avanpost configs-> <add key="clientid" value="adfs-test" /> <add key="secret" value="adfs-test-secret" /> <add key="redirectUrl" value="https://<домен>" /> <add key="authEndpoint" value="https://<домен>/oauth2/authorize" /> - <add key="tokenEndpoint" value="https://<домен>/oauth2/token" /> - секция token endpoint из https://<домен>//.well-known/openid-configuration <!-/Avanpost configs-> </appSettings> </configuration>
Параметр | Значение |
---|---|
clientid | Значение clientid приложения, следует скопировать из административной консоли |
secret | Секрет приложения |
redirectUrl | URL перенаправления. Должен быть указан домен ADFS (наример, https://mail.test.dom ) |
authEndpoint | Значение секции authorize endpoint из файла по адресу |
tokenEndpoint | Значение секции token endpoint из |
Важно
Значения элементов секрета в указанной реализации не должны содержать следующие комбинации символов: "--" (двойное тире); "/*" (косая черта, звездочка); "&#" (амперсанд решетка).