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 et non le certificat de l'interface Web du portail ADFS ! Vous aurais 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 aurais 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.




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 Intermédiaire

Prérequis :

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