Найти в Дзене

Полное руководство по Active Directory Federation Services (ADFS)

Оглавление

Введение

ADFS (Active Directory Federation Services) — это компонент Windows Server, обеспечивающий функционал провайдера аутентификации для веб-приложений. Службы федерации AD используются для аутентификации внутренних пользователей домена в облачных и внешних сервисах.

Зачем нужен ADFS?

Несмотря на наличие Active Directory, его протоколы аутентификации (Kerberos, NTLM, LM) не предназначены для работы через интернет:

  • Kerberos требует членства веб-сервера в домене AD
  • NTLM и LM считаются недостаточно защищенными протоколами
  • Стандартные протоколы AD не подходят для современных веб-приложений

ADFS решает эти проблемы, выступая в роли центра выдачи маркеров доступа (claims). На основании успешной аутентификации в Active Directory, ADFS выдает цифровые удостоверения, которые затем используются для аутентификации и авторизации в веб-приложениях.

Компоненты системы

ADFS состоит из двух основных компонентов:

  1. Active Directory Federation Services (ADFS) - основной сервер федерации
  2. Web Application Proxy (WAP) - компонент для безопасной публикации в интернет, который:
  • Принимает входящие запросы из интернета
  • Перенаправляет их на ADFS сервер
  • Возвращает ответы клиенту
  • Может работать как реверс-прокси для публикации внутренних веб-приложений
  • Обеспечивает шифрование данных через TLS

Популярные сценарии использования

ADFS обеспечивает единый вход (SSO) для пользователей AD в различные внешние сервисы, включая:

  • Microsoft 365 (Office 365) - корпоративная почта, SharePoint, Teams, Exchange
  • Контур.Толк - корпоративный мессенджер и система видеоконференций
  • Яндекс 360 - почтовый сервис и офисные приложения
  • Другие веб-приложения с поддержкой федеративной аутентификации

Федеративное доверие в ADFS

Федеративное доверие в ADFS - это механизм, позволяющий настроить доверительные отношения между вашим ADFS сервером и внешними приложениями/сервисами для обеспечения безопасной аутентификации ваших пользователей. ADFS выступает в роли посредника между вашим Active Directory и внешним сервисом, подтверждая подлинность пользователей через токены безопасности.

Основные компоненты:

  • Identity Provider (IdP) - поставщик удостоверений, отвечающий за аутентификацию пользователей
  • Resource Provider (RP) - поставщик ресурсов, предоставляющий доступ к приложениям
  • Security Token Service (STS) - служба выдачи токенов безопасности
  • Claims Provider - служба, выдающая утверждения во время процесса входа (например, Active Directory)
  • Relying Party - приложение, использующее токены, выданные ADFS
  • Security Token - токен безопасности, содержащий утверждения о пользователе
  • Claims - формализованные утверждения в формате "тип-значение" о субъекте (например, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress: user@domain.com), которые имеют определенный тип из стандартной схемы URI, выдаются доверенным источником, используются для принятия решений о доступе и передаются в токене безопасности в стандартизированном формате

Процесс федеративной аутентификации:

  1. Пользователь запрашивает доступ к приложению
  2. Приложение перенаправляет пользователя на IdP
  3. IdP аутентифицирует пользователя
  4. IdP создает и подписывает токен безопасности
  5. Токен передается приложению
  6. Приложение проверяет токен и предоставляет доступ

Сертификаты в ADFS

SSL/TLS сертификат службы

  • Используется для защиты HTTPS соединений с ADFS
  • Требования:Для production среды должен быть от доверенного центра сертификации
    Имя субъекта должно соответствовать FQDN сервера ADFS (например, sts.company.com)
    Поддерживаются wildcard-сертификаты
    Можно использовать один сертификат на ADFS и WAP серверах
    Должен содержать закрытый ключ
    Должен быть установлен в Personal store компьютера

Service Communications Certificate

  • Используется для защиты WCF-endpoint'ов и коммуникаций между ADFS серверами в ферме
  • Может быть тем же SSL сертификатом, что используется для HTTPS
  • В тестовой среде может быть самоподписанным
  • В production должен быть от доверенного центра сертификации

Token-Signing Certificate

  • Используется для подписи SAML токенов
  • Является self-signed сертификатом
  • Генерируется автоматически при установке ADFS
  • Срок действия по умолчанию 1 год
  • Публичная часть должна быть доступна Relying Party через федеративные метаданные

Token-Decrypting Certificate

  • Используется для расшифровки зашифрованных SAML токенов, полученных от Relying Party
  • Является self-signed сертификатом
  • Генерируется автоматически при установке ADFS
  • Срок действия по умолчанию 1 год
  • Публичная часть должна быть доступна Relying Party через федеративные метаданные

Примечание: Token-Signing и Token-Decrypting сертификаты являются внутренними сертификатами ADFS и не требуют установки сертификатов от доверенных центров сертификации. Их самоподписанность не влияет на безопасность, так как они используются только для криптографических операций с токенами.

Типы развертывания ADFS

Ферма ADFS с внутренней базой данных Windows Internal Database (WID)

  • Поддерживается во всех версиях Windows Server

Особенности:

  • Первый сервер является основным с базой данных для чтения/записи
  • Вторичные серверы содержат копию базы только для чтения
  • Изменения вносятся только на основном сервере
  • Синхронизация каждые 5 минут

Ограничения:

  • Максимум 5 серверов в ферме
  • До 100 доверительных отношений

Ферма ADFS с использованием SQL Server

  • Поддерживается во всех версиях Windows Server

Преимущества:

  • Все серверы равнозначны
  • Изменения можно вносить на любом сервере
  • Неограниченное количество серверов

Недостатки:

  • Сложнее в обслуживании
  • Зависимость от SQL Server

Установка и настройка ADFS

Предварительные требования

  1. Выделенный сервер
  • ADFS должен быть установлен на отдельном сервере
  • Не допускается установка на контроллер домена
  • Не рекомендуется совмещать с другими ролями (RDS, RADIUS и т.д.)
  • Сервер должен быть членом домена, но не контроллером домена
  • Поддерживаются Windows Server 2012 R2 и новее

2. Сервисная учетная запись

Рекомендуется использовать Group Managed Service Account (gMSA)
Это лучше, чем использовать обычную доменную учетную запись для служб ADFS, потому что:

  1. Не нужно заботиться о смене пароля
  2. Пароль никто не знает, даже администраторы
  3. Учетная запись может использоваться только на указанном сервере
  4. Нет риска компрометации пароля через его утечку

Поэтому Microsoft рекомендует использовать именно gMSA для служб ADFS.

# Получаем объект компьютера ADFS из AD

$server = Get-ADComputer adfs1

# Создаем gMSA аккаунт со следующими параметрами:

New-ADServiceAccount -Name gMSAADFS ` # Имя учетной записи

-DNSHostName adfs.contoso.com ` # DNS имя сервиса

-Enabled $True ` # Учетная запись активна

-ManagedPasswordIntervalInDays 30 ` # Пароль меняется каждые 30 дней

-PrincipalsAllowedToRetrieveManagedPassword $server # Только этот ADFS сервер может использовать учетку

По умолчанию gMSA учетки создаются в отдельном OU Managed Service Accounts.

Сертификат службы

  • Требуется SSL сертификат с:
  • EKU (Extended Key Usage): Server Authentication
  • Subject Name и SAN: FQDN ADFS сервера
  • Возможностью экспорта закрытого ключа
  • Формат: PFX
  • Может быть получен от внутреннего CA или внешнего центра сертификации

Процесс установки

  1. Установка роли ADFS

# Через PowerShell

Add-WindowsFeature ADFS-Federation

# Или через Server Manager -> Add Roles and Features -> Active Directory Federation Services

-2

2. Начальная настройка

  • Запустите конфигуратор ADFS (AD FS Configuration Wizard)

Выберите "Create the first federation server in a federation farm"

-3
-4

Укажите SSL сертификат (PFX)

-5

Укажите сервисную учетную запись (gMSA)

-6

Выберите тип базы данных:Windows Internal Database (WID) для небольших развертываний

SQL Server для крупных инсталляций
SQL Server для крупных инсталляций

Затем щелкаете, Next -> Next -> Configure. Ваш ADFS сервер развернут.

Тестирование и диагностика ADFS

Встроенная страница тестирования IdP

ADFS предоставляет встроенную страницу для тестирования аутентификации:

# Включение страницы тестирования

Set-AdfsProperties -EnableIdpInitiatedSignonPage $true

# URL для доступа

https://adfs.contoso.com/adfs/ls/IdpInitiatedSignon.aspx

Важно: Включайте эту страницу только для тестирования, в production она должна быть отключена.

Set-AdfsProperties -EnableIdpInitiatedSignonPage $false

Конечные точки (Endpoints)

ADFS использует различные конечные точки для обработки запросов:

Основные типы:

  1. /adfs/ls - обработка запросов от веб-приложений (пассивная аутентификация)
  2. /adfs/services/trust - обработка запросов от клиентских приложений (активная аутентификация)

# Получение списка конечных точек

Get-AdfsEndpoint

# Включение конечной точки

Enable-AdfsEndpoint -TargetAddressPath "/adfs/ls"

# Отключение конечной точки

Disable-AdfsEndpoint -TargetAddressPath "/adfs/ls"

ADFS Proxy Server

Прокси-сервер ADFS (также известный как Web Application Proxy) используется для обработки запросов из внешней сети.

Особенности:

  • Устанавливается в DMZ
  • Не выполняет аутентификацию
  • Только перенаправляет запросы на ADFS сервер
  • Защищает ADFS сервер от прямого доступа из интернета

Требования для установки:

  • Windows Server 2012 R2 или новее
  • Открытый порт 443 между прокси и ADFS
  • Сертификат (можно использовать тот же, что и на ADFS)
  • Доступ к ADFS серверу

Установка прокси-сервера:

  1. Установить роль Web Application Proxy:

Install-WindowsFeature Web-Application-Proxy -IncludeManagementTools

2. Настроить прокси с помощью Install-WebApplicationProxy:

# Публикация ADFS через WAP

Add-WebApplicationProxyApplication -ExternalPreauthentication PassThrough `

-ExternalUrl "https://external.company.com/adfs" `

-BackendServerUrl "https://internal-adfs.company.local" `

-ExternalCertificateThumbprint "CERT_THUMBPRINT" `

-Name "ADFS Proxy" `

-EnableHTTPRedirect

Процесс аутентификации

  1. Пользователь пытается получить доступ к приложению
  2. Приложение перенаправляет на ADFS
  3. ADFS аутентифицирует пользователя через Active Directory
  4. ADFS создает токен безопасности с утверждениями
  5. Токен передается приложению
  6. Приложение проверяет токен и предоставляет доступ
  • MSISAuth - статус аутентификации
  • MSISAuthenticated - время аутентификации
  • MSISLoopDetectionCookie - отслеживание попыток входа
  • MSISSignout - очистка данных при выходе

Claims X-Ray для ADFS

Microsoft предоставляет специальный инструмент для тестирования claims:

  1. Установка через PowerShell скрипт:

.\Install-ClaimsXray.ps1

  1. Или настройка через консоль ADFS:Добавьте доверие для https://adfshelp.microsoft.com/ClaimsXray
    Настройте необходимые claim rules
  2. Возможности Claims X-Ray:Просмотр всех доступных claims
    Тестирование правил преобразования
    Проверка работы атрибутов
    Анализ токенов безопасности

Анализ трафика с помощью Telerik Fiddler

Fiddler - незаменимый инструмент для анализа HTTPS трафика между клиентом и ADFS:

  1. Настройка:Установите Fiddler
    Включите HTTPS декодирование (Tools → Options → HTTPS)
    Установите SSL сертификат Fiddler
  2. Что можно анализировать:Процесс аутентификации в ADFS
    Передаваемые claims и токены

    Cookies аутентификации:MSISAuth
    MSISAuthenticated
    MSISLoopDetectionCookie
    MSISSignout
    Редиректы и цепочки аутентификации
    Ошибки авторизации
  3. Полезные советы:Используйте фильтры по хосту ADFS
    Проверяйте заголовки безопасности
    Анализируйте содержимое токенов
    Отслеживайте цепочки редиректов
  4. Типичные сценарии анализа:Отладка проблем с федерацией
    Проверка корректности claims
    Анализ ошибок аутентификации
    Проверка безопасности соединения

Примечание: При использовании Fiddler в production среде убедитесь, что не нарушаете политики безопасности организации и не логируете чувствительные данные пользователей.

Безопасность и лучшие практики

Архитектура развертывания

При публикации ADFS для внешнего доступа следует придерживаться следующей архитектуры:

Интернет -> Файрвол -> WAP (DMZ) -> Файрвол -> ADFS (Внутренняя сеть)

Прямой доступ (не рекомендуется)

Риски прямого доступа:

  • Открытая поверхность для атак из интернета
  • Отсутствие промежуточного слоя защиты
  • Прямая доступность ADFS сервера
  • Повышенный риск компрометации

Web Application Proxy (рекомендуется)

Преимущества использования WAP:

  • Размещение в DMZ
  • ADFS остается в защищенной сети
  • Предварительная фильтрация запросов
  • TLS терминация
  • Защита от DoS атак

Пример интеграции с внешним сервисом

Пример настройки ADFS для интеграции с внешним сервисом (на примере Толка):

# Создание группы приложений

$appGroupName = "ExternalService"

$applicationName = "External Web Application"

# Настройка разрешенных URL для перенаправления

$redirectUrls = @(

"https://auth-gateway.testkontur.ru/login/callback",

"https://auth-gateway.kontur.ru/login/callback"

)

# Создание приложения

$webApp = New-AdfsWebApiApplication -ApplicationGroupIdentifier $appGroupName `

-Name $applicationName `

-RedirectUri $redirectUrls `

-Identifier "https://auth-gateway.kontur.ru" `

-AccessControlPolicyName "Permit everyone"

New-AdfsApplicationGroup -Name $appGroupName -ApplicationType WebBrowser -ApplicationNames @($applicationName)

# Настройка правил для атрибутов LDAP

$rules = @"

@RuleTemplate = "LdapClaims"

@RuleName = "User Claims"

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]

=> issue(store = "Active Directory",

types = (

"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress",

"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname",

"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"

),

query = ";mail,sn,givenName;{0}",

param = c.Value

);

"@

$app = Get-AdfsWebApiApplication -Name $applicationName

Set-AdfsWebApiApplication -TargetApplication $app -IssuanceTransformRules $rules

Общие рекомендации по безопасности

  1. Сертификаты:
  • Использовать только сертификаты от доверенных CA в production
  • Настроить автоматическое обновление сертификатов
  • Регулярно проверять сроки действия

2. Мониторинг:

  • Настроить логирование всех попыток доступа
  • Регулярно проверять журналы
  • Настроить оповещения о подозрительной активности

3. Интеграция:

  • Ограничивать redirect URI только необходимыми адресами
  • Минимизировать передаваемые claims
  • Регулярно проверять активные федеративные отношения

5. Инфраструктура:

  • Регулярное обновление всех компонентов
  • Сегментация сети
  • Резервное копирование конфигурации
  • Документирование всех изменений

Обсуждаем тут.

Наши услуги для Юр. Лиц. https://bsd.su/tags/sistemnyy-administrator/

https://t.me/sysadmin_bsd