Intégrer l'authentification ADFS sur un serveur Exchange

Formation Libérez tout le potentiel de Microsoft ADFS

Tutorial Thumbnail

Au travers de ce tutoriel, nous allons mettre en place l'authentification ADFS lors de l'accĂšs Ă  Outlook Web App (OWA) et l'Exchange Control Panel (ECP).


La connexion ne se basera plus sur le formulaire d'authentification OWA et ECP mais désormais depuis le portail ADFS. Egalement, il sera avec ADFS possible d'ajouter une authentification MFA afin de mieux centraliser et sécuriser l'authentification du client.


À noter cependant que l'authentification ADFS impactera uniquement les WebUI OWA et ECP, pas l'ActiveSync et l'Auto Discover.


Infrastructure

Au sein de ce tutoriel, nous allons utiliser trois serveurs qui seront répartis avec les rÎles suivants :

  • Un serveur ADFS : serveur d'identitĂ© dans le rĂ©seau interne de l'entreprise.
  • Un serveur ADFS-Proxy (WAP) : proxy ADFS destinĂ© aux authentifications externes de l'organisation, sur Internet.
  • Un serveur Exchange 2016 ou supĂ©rieur.


Récupérer les informations des serveurs

Avant toute chose, nous devons récupérer les FQDN des serveurs Exchange et de l'ADFS afin de les utiliser ensuite.


Sur le serveur Exchange

Ouvrez l'invite de commande "'Exchange Management Shell". On souhaite récupérer deux informations :

On récupÚre l'adresse externe de l'OWA du serveur Exchange :

[PS] C:\> (Get-OwaVirtualDirectory).ExternalUrl.AbsoluteUri


On récupÚre l'adresse externe de l'ECP du serveur Exchange :

[PS] C:\> (Get-EcpVirtualDirectory).ExternalUrl.AbsoluteUri


Préparation du serveur ADFS

Dans un premier temps, nous allons récupérer les informations nécessaires sur l'ADFS. Puis nous allons ensuite lancer une série d'instructions dans un script PowerShell qui nous permettra de créer les différentes approbations de partie de confiance.


Récupération de l'URL ADFS

On va récupérer certains éléments afin de compléter notre installation.

Dans un premier temps, on récupÚre le FQDN de l'ADFS :

[PS] C:\> Get-ADFSProperties | Select-Object HostName, FederationPassiveAddress


Vous devriez obtenir quelque chose du genre : https://<ADFS>.domain.fr/adfs/ls/




Construction du script de configuration

On doit maintenant préparer le serveur ADFS. AprÚs avoir récupérés nos FQDN publics et accessibles depuis Internet et en interne, depuis notre serveur Exchange, nous allons créer un script afin de créer une nouvelle authentification de confiance pour le serveur Exchange sur le serveur ADFS.


Ainsi, voici le script de configuration à exécuter sur le serveur ADFS afin de préparer l'authentification du serveur Exchange :

## --- VARIABLES --- ##
# On rĂ©cupĂšre le chemin absolu externe de l‘OWA du serveur Exchange
[string]$ExchangeOWAURL = 'https://<EXCHANGE_FQDN>/owa'

# On rĂ©cupĂšre le chemin absolu externe de l‘ECP du serveur Exchange
[string]$ExchangeECPURL = 'https://<EXCHANGE_FQDN>/ecp'
## ----------------- ##


# CrĂ©ation d‘une nouvelle rĂšgle Claims : ‘AllowAllAuthzRule‘
[string]$IssuanceAuthorizationRules = '@RuleTemplate = "AllowAllAuthzRule"

	=> issue(Type = "http://schemas.microsoft.com/authorization/claims/permit",
Value = "true");'

# CrĂ©ation d‘une nouvelle rĂšgle Claims : ‘ActiveDirectoryUserSID‘
[string]$IssuanceTransformRules = '@RuleName = "ActiveDirectoryUserSID"
	c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]

	=> issue(store = "Active Directory", types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid"), query = ";objectSID;{0}", param = c.Value); 

	@RuleName = "ActiveDirectoryUPN"
	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/upn"), query = ";userPrincipalName;{0}", param = c.Value);'


# Application des rÚgles créées
# ~~ RĂšgle pour l'OWA
Add-ADFSRelyingPartyTrust -Name 'Outlook Web App' -Enabled $true -Notes ('This is a trust for {0}' -f $ExchangeOWAURL) -WSFedEndpoint $ExchangeOWAURL -Identifier $ExchangeOWAURL -IssuanceTransformRules $IssuanceTransformRules -IssuanceAuthorizationRules $IssuanceAuthorizationRules

# ~~ RĂšgle pour l'ECP
Add-ADFSRelyingPartyTrust -Name 'Exchange Admin Center (EAC)' -Enabled $true -Notes ('This is a trust for {0}' -f $ExchangeECPURL) -WSFedEndpoint $ExchangeECPURL -Identifier $ExchangeECPURL -IssuanceTransformRules $IssuanceTransformRules -IssuanceAuthorizationRules $IssuanceAuthorizationRules



Préparation du serveur Exchange

Récupérer l'empreinte du certificat

On souhaite récupérer l'empreinte du certificat de signature des jetons ADFS :


Récupérer l'empreinte avec PowerShell

[PS] C:\> Get-ADFSCertificate Token-Signing | Select-Object Thumbprint



Il s'agit ici de récupérer le certificat de signature des jetons ADFS (Token-Signing) et non le certificat de l'interface Web du portail ADFS ! Vous aurez sinon vous obtiendrez l'erreur suivante sur l'Exchange : "WrongAudienceUriOrBadSigningCert" lors de la phase d'authentification.


Récupérer l'empreinte depuis la console ADFS

Depuis la console ADFS, récupérez le certificat de signature dans le dossier Certificat > Signature de jetons. Double cliquer sur le certificat, puis l'onglet Détails > Empreinte numérique.




Il sera nĂ©cessaire d'importer la clĂ© publique du certificat (.crt) sur le serveur Exchange (le certificat doit ĂȘtre trustĂ© sur l'Exchange). Vous aurez sinon vous obtiendrez l'erreur suivante sur l'Exchange : "WrongAudienceUriOrBadSigningCert" lors de la phase d'authentification.


Construction du script de configuration

Enfin, nous devons préparer le serveur Exchange afin d'autoriser l'authentification depuis l'ADFS. AprÚs avoir récupérés nos FQDN publics et accessibles depuis Internet et en interne, et aprÚs avoir récupéré le FQDN du serveur ADFS, nous devons rediriger toute l'authentification directement sur le serveur ADFS.


Plus précisément, pour tout nouveau client, en souhaitant joindre le FQDN du serveur Exchange, celui-ci sera systématiquement redirigé sur le portail ADFS. Et aprÚs avoir renseigné ses informations d'identification, il sera redirigé sur le Webmail Outlook.


Ainsi, voici le script de configuration à exécuter sur le serveur Exchange :

## --- VARIABLES --- ##
# On rĂ©cupĂšre le chemin absolu externe de l‘OWA du serveur Exchange
[string]$ExchangeOWAURL = 'https://<EXCHANGE_FQDN>/owa'

# On rĂ©cupĂšre le chemin absolu externe de l‘ECP du serveur Exchange
[string]$ExchangeECPURL = 'https://<EXCHANGE_FQDN>/ecp'

# On spécifie le FQDN du serveur ADFS
[string]$ADFSURL = 'https://<ADFS_FQDN>/adfs/ls/'
## ----------------- ##


# On récupÚre le certificat de signature Thunbprint sur le serveur ADFS.
# $>Get-ADFSCertificate Token-Signing | Select-Object Thumbprint
[string]$AdfsSignCertThumbprint = '<YOUR_TS_THUMBPRINT>'

# On construit un tableau avec nos deux URL du serveur Exchange
$uris = @($ExchangeOWAURL, $ExchangeECPURL)

# On dĂ©ploie le certificat de l‘ADFS sur l‘organisation Exchange
Set-OrganizationConfig -AdfsIssuer $ADFSURL -AdfsAudienceUris $uris -AdfsSignCertificateThumbprint $AdfsSignCertThumbprint

# On configure l‘authentification exclusivement rĂ©alisĂ©e par l‘ADFS
Get-EcpVirtualDirectory | Set-EcpVirtualDirectory -AdfsAuthentication $true -BasicAuthentication $false -DigestAuthentication $false -FormsAuthentication $false -WindowsAuthentication $false
Get-OwaVirtualDirectory | Set-OwaVirtualDirectory -AdfsAuthentication $true -BasicAuthentication $false -DigestAuthentication $false -FormsAuthentication $false -WindowsAuthentication $false -OAuthAuthentication $false


RĂ©tablir l'authentification classique

En cas de problÚme, vous pouvez si vous le souhaitez rétablir l'authentification classique Windows sur le serveur Exchange, permettant ainsi de se connecter directement depuis le formulaire OWA.

Pour cela, en PowerShell, exécutez le commandes suivantes :

Get-OwaVirtualDirectory | Set-OwaVirtualDirectory -AdfsAuthentication $false -BasicAuthentication $true -DigestAuthentication $true -FormsAuthentication $true -WindowsAuthentication $true -OAuthAuthentication $false
Get-EcpVirtualDirectory | Set-EcpVirtualDirectory -AdfsAuthentication $false -BasicAuthentication $true -DigestAuthentication $true -FormsAuthentication $true -WindowsAuthentication $true


Tests d'authentification

En souhaitant joindre le serveur Echange, nous sommes directement redirigé sur le portail ADFS :




Nous souhaitons nous connectons sur le serveur ADFS et si la connexion est OK, nous sommes redirigé sur l'OWA :




En essayant de se déconnecté, l'ADFS nous a bien déconnecter de notre session. La connexion est applicable sur toutes les applications utilisant l'ADFS.




Troubleshooting

Il est donc trĂšs important d'importer le fichier .crt (certificat public) "Token-Signing" du serveur ADFS sur votre serveur Exchange, sinon l'authentification ne fonctionnera pas !


Le message d'erreur que vous avez au moment de l'authentification avec le serveur ADFS est le suivant :




Vous devez installer le certificat sur le serveur Exchange. Pour cela, exportez en fichier .cer (Base64) le certificat "Token-Signing" et réalisez son installation.

Ouvrez le fichier et cliquez sur "Installer le certificat" :



On souhaite importer le certificat sur l'ordinateur local :




Sélectionnez "Placer tous les certificats dans le magasin suivant". Nous allons stocker ce certificat dans le magasin "Autorités de certification racine de confiance" :




AprÚs avoir cliqué sur suivant, validez l'installation du certificat :




Le certificat est bien vérifié et installé sur le serveur. Il est donc approuvé :




Conclusion

Et voilà ! Nous avons vu dans un premier temps comment nous avons récupérés les différents sur les serveurs respectifs afin de procéder à une authentification ADFS sur l'OWA et l'ECP (interfaces Web) d'un serveur Exchange.


Nous avons ainsi enregistrĂ©s deux approbations de partie de confiance pour les deux accĂšs afin d'ajouter notre application au serveur ADFS. Un script de configuration PowerShell a ainsi automatisĂ© nos actions. À noter cependant que les actions doivent ĂȘtres rĂ©alisĂ©es sur tous les serveurs si vous disposez d'un cluster ADFS, de mĂȘme que pour Exchange.


Enfin, en essayant de se connecter avec un compte, celui-ci est redirigĂ© vers le serveur ADFS et une fois l'authentification vĂ©rifiĂ©e, nous sommes redirigĂ©s sur l'interface Outlook Web App 🎉



Crédits :

  • Merci Mr. HOCHWALD : https://hochwald.net/enable-adfs-authentication-on-exchange-2016/

Niveau Avancé

Prérequis :

Proposer une modification
Antoine
Par Antoine
Rédigé le Lundi 01 Janvier 2024