· 17 мин чтения

AD FS: настройка единого входа SSO для корпоративных сервисов

Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. За 15+ лет администрирования AD-инфраструктур я развернул AD FS у более чем 20 клиентов — от юридической конторы на 40 пользователей до производственного холдинга на 400. И всегда одна и та же история: сотрудники жалуются, что у них десяток логинов — в почту, в портал, в 1С, в Confluence. А руководитель жалуется, что люди пишут пароли на стикерах. SSO решает обе задачи сразу.

Когда нужен AD FS

Active Directory Federation Services — роль Windows Server, которая выдаёт федеративные токены (SAML, WS-Fed, OAuth, OpenID Connect) пользователям, вошедшим в AD. Приложение доверяет этим токенам и пускает пользователя без отдельного пароля.

Типовые сценарии использования:

Архитектура фермы

Минимальный продакшн AD FS — ферма из двух серверов плюс два Web Application Proxy в DMZ. Внутренние серверы — AD-joined, WAP — Workgroup. Схема:

РольОСТребования
AD FS-серверServer 2019/2022/20254 vCPU, 8 ГБ RAM, 80 ГБ SSD, AD-joined
WAPServer 2019/2022/20252 vCPU, 4 ГБ RAM, 60 ГБ SSD, Workgroup в DMZ
NLB/балансер-VIP, Health probe на 443/tcp

Подготовка сертификатов

AD FS требует три сертификата:

Покупаем Comodo/DigiCert/Sectigo на sts.company.ru (или берём Let's Encrypt через ACME-клиент). Устанавливаем сертификат в Computer Personal Store на AD FS01.

Установка первого AD FS

Сервисная учётка с именем svc_adfs в AD, с правами Read на базу CN=Program Data,DC=company,DC=ru. В группу Managed Service Accounts добавлять не обязательно — можно обычную user account.

Install-WindowsFeature ADFS-Federation -IncludeManagementTools

$cred = Get-Credential -Message "Введите svc_adfs"

Install-AdfsFarm `
  -CertificateThumbprint "B3A5F...thumbprint" `
  -FederationServiceName "sts.company.ru" `
  -FederationServiceDisplayName "Company SSO" `
  -ServiceAccountCredential $cred

После инсталляции проверяем через браузер: https://sts.company.ru/adfs/ls/IdpInitiatedSignon.aspx (нужно включить отдельно, по умолчанию выключена). Должна появиться страница логина.

Добавление второго AD FS в ферму

Install-WindowsFeature ADFS-Federation -IncludeManagementTools

Add-AdfsFarmNode `
  -PrimaryComputerName "adfs01.corp.company.ru" `
  -CertificateThumbprint "B3A5F...thumbprint" `
  -ServiceAccountCredential $cred

Оба сервера добавляем в NLB-кластер Windows или ставим за внешним балансером, VIP — 10.10.5.100. Внутренний DNS sts.company.ru указывает на этот VIP.

Развёртывание Web Application Proxy

WAP ставится в DMZ, без AD. Ему нужен тот же публичный сертификат sts.company.ru и трастовый токен от AD FS.

# На AD FS01 генерируем один раз одноразовый токен
Get-AdfsServerConfiguration | Select FSConfigurationProxyTrustCertificate

# На WAP
Install-WindowsFeature Web-Application-Proxy -IncludeManagementTools

$cert = (Get-ChildItem Cert:\LocalMachine\My | Where Subject -like "*sts.company.ru*").Thumbprint

Install-WebApplicationProxy `
  -CertificateThumbprint $cert `
  -FederationServiceName "sts.company.ru" `
  -FederationServiceTrustCredential (Get-Credential)

Второй WAP — аналогично. Внешний балансировщик / CDN → 443/tcp на WAP01 и WAP02.

Relying Party Trust для Microsoft 365

Самый распространённый сценарий — SSO в Microsoft 365. Делается через Entra ID Connect (бывший Azure AD Connect). Запускаете мастер на отдельном сервере, выбираете режим Federation with AD FS, указываете домен company.ru и AD FS-сервер. Мастер сам создаёт Relying Party Trust в AD FS и добавляет домен в Entra.

Если делать вручную — через PowerShell:

$MetadataUrl = "https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml"

Add-AdfsRelyingPartyTrust `
  -Name "Microsoft 365" `
  -MetadataURL $MetadataUrl `
  -MonitoringEnabled $true `
  -AutoUpdateEnabled $true

Дальше настраиваем Claim Rules — правила выдачи атрибутов. Минимум: UserPrincipalName → UPN, objectGUID → ImmutableID.

Интеграция SAML-приложений

Любое приложение с поддержкой SAML 2.0 цепляется одинаково: экспортируете метадату AD FS (https://sts.company.ru/FederationMetadata/2007-06/FederationMetadata.xml), загружаете в приложение. Потом на AD FS создаёте Relying Party Trust из метадаты приложения и пишете Claim Rules.

Типовые Claim Rules:

# LDAP Attributes to Outgoing Claims
Email = ldap-lookup(mail)
NameID = ldap-lookup(userPrincipalName)
FirstName = ldap-lookup(givenName)
LastName = ldap-lookup(sn)
Groups = ldap-lookup(memberOf)  # для авторизации по группам

У нас на практике за 2 часа подключаем типичное приложение — Confluence, GitLab, Grafana, Jenkins. Дольше только с российскими ERP-системами, где SAML-имплементация реализована «как получилось».

MFA через сторонние провайдеры

AD FS поддерживает MFA-плагины: Duo, Okta Verify, YubiKey, Multifactor.ru, на Server 2019+ — встроенный Azure MFA. Включается глобально или per Relying Party:

Set-AdfsRelyingPartyTrust `
  -TargetName "Microsoft 365" `
  -AdditionalAuthenticationRules 'c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid",
         Value =~ "^(?i)S-1-5-21-...-RequireMFA$"] => issue(Type = "http://schemas.microsoft.com/claims/authnmethodsreferences", Value = "http://schemas.microsoft.com/claims/multipleauthn");'

Схема: если пользователь в группе RequireMFA, на второй фактор попадает обязательно. Остальные — однофакторно с домашней сети, двухфакторно извне.

Реальный кейс: SSO для юридической фирмы

В феврале 2025 юридическая фирма — 72 юриста, офис в Москва-Сити — попросили подключить SSO. Проблема: 8 сервисов (M365, iManage, Confluence, внутренний портал, DocuSign, BPMOnline, Teamwork, Dropbox Business) = 8 логинов на каждого сотрудника. Пароли сбрасывались по 10–15 раз в неделю.

За 10 рабочих дней мы развернули отказоустойчивую ферму: два Dell R650 с Xeon Platinum 8280 в дата-центре МТС под AD FS и два WAP на виртуалках в DMZ. Trust-ы для всех 8 сервисов, публичный SSL Wildcard *.lawfirm.ru, MFA через Multifactor.ru для внешнего доступа.

Результат: звонки в саппорт по паролям упали на 92% за первые два месяца. Время входа в рабочие сервисы — 4–6 секунд против минуты на ручной ввод. Стоимость работ — 220 000 руб. за всё включая лицензии сертификатов. Окупилось за квартал только на снижении нагрузки хелпдеска.

Типичные грабли

Развернём корпоративное SSO на AD FS

Я лично проектирую и внедряю фермы AD FS с WAP, подключаю Microsoft 365, SAML- и OIDC-приложения, настраиваю MFA. Срок внедрения — от 5 до 15 рабочих дней в зависимости от числа сервисов.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ

Зачем AD FS, если есть Entra ID (Azure AD)?
Entra ID удобнее для облачных сценариев, но AD FS остаётся нужен, когда корпоративная политика требует держать аутентификацию в локальной инфраструктуре. Плюс AD FS работает без интернета и лицензий P1/P2.
Сколько серверов нужно под AD FS?
Минимум один AD FS-сервер и один Web Application Proxy в DMZ. Для продакшн — два AD FS в ферме + два WAP. Это даёт отказоустойчивость и разделение ролей internal/external.
Что такое Relying Party Trust?
Это доверительные отношения между AD FS и приложением-потребителем (Microsoft 365, Confluence, SharePoint). AD FS выдаёт токен пользователю, приложение его принимает без отдельной аутентификации.
Нужен ли публичный SSL-сертификат?
Для сервисных трастов с облаком (Microsoft 365) — обязательно. Публичный CA, Wildcard или одиночный на sts.company.ru. Для внутренних трастов достаточно сертификата от корпоративного AD CS.
Как интегрировать с Microsoft 365 / Entra?
Через Azure AD Connect (сейчас Entra ID Connect) с опцией Federation. Мастер сам создаёт Relying Party Trust в AD FS и прописывает домены в Entra. После этого сотрудники входят в M365 своими доменными учётками.

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.