Включение Modern Auth для Exchange и его работа с Indeed ADFS Extension
Exchange Server 2019 CU15 поддерживает OAuth 2.0 (Modern Authentication) c использованием ADFS в качестве службы токенов безопасности (STS). После включения Modern Authentication клиент Outlook перенаправляет пользователя на сервер ADFS, где в качестве дополнительного метода аутентификации будет использоваться провайдер Indeed AMВ статье описаны предварительные требования, порядок настройки Modern Authentication и пример работы с Indeed ADFS Extension.
За основу статьи взята официальная документация Microsoft по настройке Modern Authentication в Exchange Server с использованием ADFS
Предусловия
- Exchange Server 2019 CU15
- Microsoft Outlook (Classic)
- Microsoft Windows 11 22H2 и позднее с обновлением KB5023706 от 14 марта 2023 года
- ADFS 2019 и позднее с английской локализацией с предварительно настроенным ADFS Extension по инструкции
- В DNS настроена CNAME-запись
autodiscover.<домен> на FQDN Exchange Server
- Между Exchange Server, ADFS и клиентскими компьютерами настроено доверие к используемым сертификатам.
Поддерживаемые клиентские платформы
В рамках данной конфигурации поддерживаются:
-
Outlook для Windows (Classic) 2021 Retail сборка от 16327.20214, 2024 Retail сборка от 18129.20158, 2024 Volume сборка от 17932.20162;
-
Outlook для Mac (Microsoft 365) на поддерживаемых версиях macOS;
-
Apple Mail на поддерживаемых версиях iOS и macOS.
Outlook для Windows (New) в данной конфигурации не поддерживается. Для сценария, описанного в статье, рекомендуется использовать Outlook для Windows (Classic) на поддерживаемой версии Windows.
Проверка Autodiscover
Перед началом настройки Modern Authentication необходимо убедиться, что Autodiscover работает корректно.
Проверить конфигурацию виртуального каталога:
Get-AutodiscoverVirtualDirectory | Format-List Server,InternalUrl,ExternalUrl,*Authentication*
Если InternalUrl и/или ExternalUrl не настроены, необходимо указать их:
Set-AutodiscoverVirtualDirectory -Identity "EXCHANGE\Autodiscover (Default Web Site)" `
-InternalUrl "https://autodiscover.company.com/Autodiscover/Autodiscover.xml" `
-ExternalUrl "https://autodiscover.company.com/Autodiscover/Autodiscover.xml"
Настройка времени жизни SSO и KMSI в ADFS
Можно включить функцию Keep Me Signed In (KMSI), после успешной аутентификации ADFS создает постоянную cookie. Пока cookie остается действительной, пользователю не требуется повторно проходить аутентификацию.
Для включения выполните:
Set-AdfsProperties -EnableKmsi $true
При отключенном KMSI время жизни SSO по умолчанию составляет 480 минут (8 часов).
Параметр задается в минутах:
Set-AdfsProperties -SsoLifetime <LifetimeInMinutes>
При включенном KMSI время жизни SSO по умолчанию составляет (24 часа).
Параметр также задается в минутах:
Set-AdfsProperties -KmsiLifetimeMins <LifetimeInMinutes>
Создание группы приложений ADFS для Outlook
Все команды данного раздела выполняются в PowerShell на сервере ADFS.
Если не планируется использовать приложения iOS и macOS, например встроенное приложение Apple Mail, создание соответствующего native client application можно пропустить. Однако рекомендуется создать его для полноты конфигурации.
- Создание Application Group
New-AdfsApplicationGroup -Name "Outlook" -ApplicationGroupIdentifier "Outlook" -Disabled:$false
- Создание Scope
Add-AdfsScopeDescription -Name "EAS.AccessAsUser.All" -Description "EAS scope"
Add-AdfsScopeDescription -Name "EWS.AccessAsUser.All" -Description "EWS scope"
Add-AdfsScopeDescription -Name "offline_access" -Description "Offline Access"
- Создание Native Client Applications
Add-AdfsNativeClientApplication -Name "Outlook - Native application" -ApplicationGroupIdentifier "Outlook" -Identifier "d3590ed6-52b3-4102-aeff-aad2292ab01c" -RedirectUri @("ms-appx-web://Microsoft.AAD.BrokerPlugin/d3590ed6-52b3-4102-aeff-aad2292ab01c","msauth.com.microsoft.Outlook://auth","urn:ietf:wg:oauth:2.0:oob")
Add-AdfsNativeClientApplication -Name "iOS and macOS - Native mail application" -ApplicationGroupIdentifier "Outlook" -Identifier "f8d98a96-0999-43f5-8af3-69971c7bb423" -RedirectUri @("com.apple.mobilemail://oauth-redirect","com.apple.preferences.internetaccounts://oauth-redirect/","com.apple.Preferences://oauth-redirect/")
- Создание Web API Applications
Для каждого URI, используемого в среде Exchange Server, необходимо создать отдельное Web API Application.
Например, если в среде используются:
необходимо создать два Web API Applications.
Важно:
Пример создания Web API Application для mail.company.com:
# Замените URI на используемые в вашей среде
$exchangeServerServiceFqdns = @("https://mail.company.com/")
$issuanceTransformRules = @"
@RuleName = "ActiveDirectoryUserSID"
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid"]
=> issue(claim = c);
@RuleName = "ActiveDirectoryUPN"
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"]
=> issue(claim = c);
@RuleName = "AppIDACR"
=> issue(Type = "appidacr", Value = "2");
@RuleName = "SCP"
=> issue(Type = "scp", Value = "user_impersonation");
@RuleName = "SCPEAS"
=> issue(Type = "scp", Value = "EAS.AccessAsUser.All");
@RuleName = "SCPEWS"
=> issue(Type = "scp", Value = "EWS.AccessAsUser.All");
@RuleName = "offlineaccess"
=> issue(Type = "scp", Value = "offline_access");
"@
foreach ($fqdn in $exchangeServerServiceFqdns) {
Add-AdfsWebApiApplication -Name "Outlook - Web API ($((New-Guid).ToString("N")))" -ApplicationGroupIdentifier "Outlook" -Identifier $fqdn -IssuanceTransformRules $issuanceTransformRules -AccessControlPolicyName "Permit Everyone"
}
- Добавление разрешений клиентским приложениям
Добавляем разрешения для всех Native Client Applications в созданных Web API Applications:
$clientRoleIdentifier = @("f8d98a96-0999-43f5-8af3-69971c7bb423","d3590ed6-52b3-4102-aeff-aad2292ab01c")
(Get-AdfsWebApiApplication -ApplicationGroupIdentifier "Outlook") | ForEach-Object {
[string]$serverRoleIdentifier = $_.Identifier
foreach ($id in $clientRoleIdentifier) {
Grant-AdfsApplicationPermission -ClientRoleIdentifier $id -ServerRoleIdentifier $serverRoleIdentifier -ScopeNames "winhello_cert","email","profile","vpn_cert","logon_cert","user_impersonation","allatclaims","offline_access","EAS.AccessAsUser.All","EWS.AccessAsUser.All","openid","aza"
}
}
- Настройка метода аутентификации в ADFS
Для работы Modern Authentication с Outlook необходимо настроить Forms Authentication в качестве метода первичной аутентификации ADFS.
Set-AdfsGlobalAuthenticationPolicy -PrimaryIntranetAuthenticationProvider FormsAuthentication
Set-AdfsGlobalAuthenticationPolicy -PrimaryExtranetAuthenticationProvider FormsAuthentication
Настройка Exchange Server для использования OAuth-токенов ADFS
- Проверка OAuth на виртуальных каталогах
Необходимо проверить, на наличие значения OAuth на следующих виртуальных каталогах:
Get-MapiVirtualDirectory | Format-List Server, *auth*
Get-WebServicesVirtualDirectory | Format-List Server, *auth*
Get-OabVirtualDirectory | Format-List Server, *auth*
Get-AutodiscoverVirtualDirectory | Format-List Server, *auth*
Get-ActiveSyncVirtualDirectory | Format-List Server, *auth*
Например:
Get-MapiVirtualDirectory | Format-List Server, *auth*
Server : EXCHANGE
IISAuthenticationMethods : {Ntlm, OAuth, Negotiate}
InternalAuthenticationMethods : {Ntlm, OAuth, Negotiate}
ExternalAuthenticationMethods: {Ntlm, OAuth, Negotiate}
Если OAuth отсутствует на каком-либо сервере или одном из пяти виртуальных каталогов, необходимо добавить его соответствующей командой
Например:
Set-ActiveSyncVirtualDirectory -ExternalAuthenticationMethods @("OAuth") -InternalAuthenticationMethods @("OAuth")
- Добавление ADFS как доверенного поставщика токенов
Создаем объект Auth Server в Exchange Server для ADFS:
New-AuthServer -Type ADFS -Name MyADFSServer -AuthMetadataUrl https://<adfs_сервер>/FederationMetadata/2007-06/FederationMetadata.xml
- Назначение ADFS Default Authorization Endpoint
Когда Exchange Server сообщает клиенту о поддержке Modern Authentication, он передает URL этого endpoint. Таким образом клиент получает информацию о том, куда необходимо обращаться для аутентификации.
Выполните:
Set-AuthServer -Identity MyADFSServer -IsDefaultAuthorizationEndpoint $true
- Включение Modern Authentication на уровне организации
Выполните:
Set-OrganizationConfig -OAuth2ClientProfileEnabled $true
- Включение Modern Authentication для пользователей
Для пользователей, использующих поддерживаемые клиенты, необходимо назначить политику Allow Modern Auth:
Set-User -Identity User -AuthenticationPolicy "Allow Modern Auth"
Настройка Microsoft Windows
Необходимо включить Modern Authentication и добавить домен ADFS в список доверенных доменов Outlook.
- Добавление ADFS в доверенные домены
Необходимо создать следующие параметры реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\AAD\AuthTrustedDomains\https://your-ADFS-domain/
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\AAD\AuthTrustedDomains\https://your-ADFS-domain
Важно создать оба ключа — с / в конце и без него.
Это можно выполнить вручную, через PowerShell или развернуть централизованно с помощью групповой политики.
Пример PowerShell:
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\AAD\AuthTrustedDomains" -Force
(Get-Item HKLM:).OpenSubKey("SOFTWARE\Policies\Microsoft\AAD\AuthTrustedDomains", $true).CreateSubKey("https://your-ADFS-domain/")
(Get-Item HKLM:).OpenSubKey("SOFTWARE\Policies\Microsoft\AAD\AuthTrustedDomains", $true).CreateSubKey("https://your-ADFS-domain")
Вместо your-ADFS-domain необходимо указать фактическое имя ADFS-сервера.
- Включение Modern Authentication в Outlook
Для каждого пользователя необходимо создать параметр:
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Identity\" -Name "EnableExchangeOnPremModernAuth" -Value 1 -Type DWord
Настройку также можно развернуть централизованно с помощью групповой политики.
Проверка работы
- При входе в клиент Outlook открывается окно ADFS, вводим логин и пароль

- Выбираем метод аутентификации Indeed ADFS Extension

- Подтверждаем вход

- Успешный вход

- Проверяем аутентификацию
Нажмите правый Ctrl, ПКМ на Outlook в трее - Connection Status.

Если в Connection Status для соединения Outlook отображается Bearer, это означает, что Outlook установил соединение с Exchange с использованием OAuth/Modern Authentication.