Установка FAM ADFS Plugin на Microsoft ADFS


Компонент Avanpost ADFS Plugin — серверный компонент Avanpost FAM, предназначенный для решения задачи аутентификации посредством использования плагина ADFS.

Компонент обеспечивает следующие функции:

  • Двухфакторная/многофакторная аутентификация в режиме графической оболочки;
  • Двухфакторная/многофакторная аутентификация при подключении по SSH.

При установке в ADFS-плагина аутентификации его возможно подключить к Avanpost FAM в качестве отдельного приложения, управляя сценарием аутентификации.

В данной статье рассмотрен вопрос настройки для механизма аутентификации посредством использования плагина ADFS.

К моменту осуществления настройки должны быть выполнены следующие требования:

  • На сервере установлена и настроена AD, а также заведены пользователи, состоящие в группах, которым предоставлен доступ к соответствующему OIDC-приложению (приложение ADFS в данном примере) на стороне Avanpost FAM Server. 
  • Выполнены требования к службам федерации AD
  • На сервере должно быть установлено корректное время.

Настройка на стороне FAM Server

Настройку компонента в интерфейсе административной консоли Avanpost FAM Server необходимо выполнить следующим образом: 

  1. Зайти во вкладку создания приложения, нажав кнопку "Добавить приложение" в сервисе "Приложения".
  2. На этапе "Основные настройки" требуется ввести наименование (ADFS в данном примере) и выбрать тип OAuth/Open ID Connect (более подробно процесс создания и управления приложениями описан в разделах Управление приложениями и Управление OpenID Connect-приложениями).

  3. На этапе "Настройки интеграции" необходимо установить настройки приложения (более подробно описано в Шаг 2. Настройки интеграции для OIDC-приложения) Обязательно требуется задать значения параметров в графе Secret (произвольный секретный ключ, который будет использоваться для подключения к приложению) , Base URL и Redirect URIs (в качестве значений Base URL и Redirect URIs следует использовать корневой домен AD FS, например https://adfs.server.ru).

    Администратор может сменить секретный ключ (например, при компрометации ключа) в профиле созданного приложения во вкладке "Настройки" в разделе "Смена секрета". Секретный ключ должен совпадать с тем, который задается в конфигурационном файле на сервере ADFS (значение Secret). 

  4. На этапе "Настройки аутентификации" выбрать факторы аутентификации приложения, установив переключатели напротив тех или иных факторов (более подробно описано в Шаг 3. Настройки аутентификации для OIDC-приложения).
  5. На этапе "Завершение" установить флажок "Сделать приложение активным" и сохранить (более подробно описано в Шаг 4. Завершение для OIDC-приложения).
  6. В режиме "Приложения" найти созданное приложение и перейти в его профиль.
  7. Во вкладке "Настройки" в разделе "Настройки интеграции" убедиться, что в графе Allowed grant types переключать выставлен в положение напротив типов Authorization code и Refresh token.
  8. Создать группу (если таковая отсутствует), пользователи которой будет аутентифицироваться при помощи компонента ADFS Plugin. Для этого необходимо нажать кнопку "Добавить группу" в режиме "Группы" и в открывшейся вкладке ввести запрашиваемые параметры (более подробно о настройке группы описано в разделе Управление доступом).
  9. Добавить в группу пользователей, которые будут аутентифицироваться при помощи ADFS Plugin (более подробно о добавлении пользователей в разделе Управление пользователями).
  10. Предоставить группе доступ к созданному приложению: в профиле группы зайти во вкладку "Приложения", найти созданное OIDC-приложение (ADFS в данном примере) и перевести переключать напротив него в положение .
  11. Внести на машине, где установлен 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

  1. Скачать и распаковать на рабочую машину актуальную версию Avanpost ADFS Plugin из репозитория
  2. Из корня папки распакованного архива открыть для редактирования конфигурационный файл App.config.
  3. Настроит конфигурационный файл App.config согласно приложению А. При этом значения параметров Redirect URL и clientid следует скопировать из профиля созданного OIDC-приложения (вкладка "Настройки, параметры Redirect URIs и Client ID соответственно)".
  4. Запустить Windows PowerShell от имени администратора.
  5. От имени администратора выполнить скрипт install.cmd и установить ADFS Plugin.

    Для корректной установки требуется выполнять скрипты от имени администратора. 

  6. Запустить Панель управления ADFS.
  7. В панели управления ADFS перейти в раздел "Служба" на вкладку "Методы проверки подлинности", выбрать "Изменить Методы многофакторной проверки подлинности" и включить метод "Avanpost" на вкладке "Дополнительно".
  8. Запустить скрипт 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 выполнять следующим образом:

  1. Запустить PowerShell
  2. Выполнить команду для получения текущей политики безопасности контента (Content Security Policy, CSP) в службе федерации Active Directory (AD FS):
    (Get-AdfsResponseHeaders | Select -ExpandProperty ResponseHeaders).'Content-Security-Policy'
  3. Просмотреть наличие записи типа frame-src 'self' https://<FAM_Server> (вместо https://<FAM Server> указать адрес настроенного FAM Server).
  4. При отсутствии записей из предыдущего пунка проверить текущие настройки CORS при помощи команды:
    Get-AdfsResponseHeaders
  5. Чтобы убедиться, что CORS включен и настроен верно, убедиться, что нижеперечисленным параметрам присвоены следующие значения:

    1. CORSEnabled : True;
    2. CORSTrustedOrigins : {https://<FAM_Server>} (вместо https://<FAM Server> должен быть указан адрес настроенного FAM Server).
  6. В противном случае следует проверить настройки 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>;";
  7. Установить правило, позволяющее использовать дополнительные факторы аутентификации для интранета:
    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" );'
  8. От имени администратора выполнить команду включения страницы входа (https://adfs.apidp.ru/adfs/ls/idpinitiatedsignon.htm), инициированного поставщиком удостоверений (IdP):
    Set-AdfsProperties -EnableIdPInitiatedSignonPage $true
  9. Открыть тестовую страницу https://adfs.apidp.ru/adfs/ls/idpinitiatedsignon.htm в браузере.
  10. Ввести учетные данные (логин и пароль) в окне ввода учетных данных.
  11. Убедиться, что появилось сообщение об успешной авторизации.
  12. Пройти аутентификацию по второму фактору (зависит от настроек процесса аутентификации для группы, в которой состоит пользователь) во всплывающем окне.
  13. Убедиться, что аутентификация прошла успешно.

Ошибки, связанные с работой компонента, записываются на сервере 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. Обновление/внесение изменения необходимо осуществлять следующим образом:

  1. Запустить панель управления ADFS.
  2. Перейти на вкладку "Методы проверки подлинности", выбрать "Изменить Методы многофакторной проверки подлинности" и выключить метод "Avanpost" (убрать флаг) на вкладке "Дополнительно".
  3. Запустить Windows PowerShell от имени администратора.
  4. Выполнить команду remove.cmd из папки архива от имени администратора, дождаться запроса на удаление и подтвердить удаление (нажать "y").
  5. Загрузить обновленный модуль/изменить файл конфигурации согласно разделу Установка и настройка данной инструкции. Для настройки параметров конфигурационного файла использовать приложение А.
  6. Выполнить команду install.cmd от имени администратора. Получить сообщения об ожидании остановки службы ADFS.
  7.  В панели управления ADFS перейти на вкладку "Методы проверки подлинности", выбрать "Изменить Методы многофакторной проверки подлинности" и включить метод "Avanpost" на вкладке "Дополнительно".
  8. Убедиться, что компонент работает корректно: успешно пройти аутентификацию.

Приложение А Параметры конфигурационного файла 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 из файла по адресу https://<домен>//.well-known/openid-configuration

tokenEndpoint

Значение секции token endpoint из https://<домен>//.well-known/openid-configuration

Важно

Значения элементов секрета в указанной реализации не должны содержать следующие комбинации символов: "--" (двойное тире); "/*" (косая черта, звездочка); "&#" (амперсанд решетка).


Обсуждение