Zum Hauptinhalt springen
< Alle Themen
Drucken

Konfiguration der modernen Authentifizierung

In diesem Artikel wird beschrieben, wie Exchange Server für die Verwendung der modernen Authentifizierung konfiguriert wird. Es werden beide Varianten nacheinander beschrieben. Wichtig: es ist nur eine Variante zu wählen und zu konfigurieren!

Die folgenden Kapitel beschreiben die Einrichtung der hybriden modernen Authentifizierung (HMA).

Voraussetzungen

Es wird angenommen, dass die folgenden Voraussetzungen bereits erfüllt sind:

 

Sämtliche Schritte müssen mittels PowerShell durchgeführt werden. Hierzu wird sowohl die Exchange Management Shell als auch eine PowerShell mit bestimmten Modulen für die Cloud-Verwaltung benötigt. Diese werden in der Folge jeweils benannt.

Schritt 1: Ermittlung der lokalen Konfiguration

Zunächst müssen die in der lokalen Exchange-Organisation konfigurierten URLs für den Zugriff ermittelt werden. Diese müssen im Dienstprinzipal in Entra ID ergänzt werden, falls sie dort noch nicht vorhanden sind. Hierzu ist die Exchange Management Shell zu verwenden:

PowerShell
				# URLs der virtuellen Verzeichnisse ermitteln
Get-MapiVirtualDirectory | fl server,*url*,*auth*
Get-WebServicesVirtualDirectory | fl server,*url*,*oauth*
Get-OABVirtualDirectory | fl server,*url*,*oauth*
Get-AutoDiscoverVirtualDirectory | fl server,*oauth*
Get-ActiveSyncVirtualDirectory | fl server,*url*,*auth*
			

In diesem Zuge kann auch gleich geprüft werden, ob OAuth für die virtuellen Verzeichnisse bereits aktiviert ist oder noch aktiviert werden muss:

PowerShell
				# OAuth für MAPI aktivieren, falls noch nicht aktiv
$MapiDirs = Get-MapiVirtualDirectory

# Für jedes ermittelte Verzeichnis OAuth hinzufügen
ForEach ($MapiDir in $MapiDirs)
   {
   $IISAuthMeth = $MapiDir.IISAuthenticationMethods
   if ($IISAuthMeth -notcontains 'OAuth')
      {
      $IISAuthMeth+='OAuth'
      Set-MapiVirtualDirectory -Identity $MapiDir.Name -IISAuthenticationMethods $IISAuthMeth
      }
   else {Write-Host 'OAuth für MAPI bereits aktiv!' -ForegroundColor Green}
   }

# OAuth für Webdienste-Verzeichnis prüfen und aktivieren, falls erforderlich
$WebSvcDirs = Get-WebServicesVirtualDirectory

# Für jedes ermittelte Verzeichnis OAuth aktivieren
ForEach ($WebSvcDir in $WebSvcDirs)
   {
   if ($WebSvcDir.OAuthAuthentication -eq $False){Set-WebServicesVirtualDirectory -Identity $WebSvcDir.Name -OAuthAuthentication $true}
   else {Write-Host 'OAuth für Webdienste bereits aktiv!' -ForegroundColor Green}
   }
   
# OAuth für Offlineadressbuch-Verzeichnis prüfen und aktivieren, falls erforderlich
$OABDirs = Get-OABVirtualDirectory

# Für jedes ermittelte Verzeichnis OAuth aktivieren
ForEach ($OABDir in $OABDirs)
   {
   if ($OABDir.OAuthAuthentication -eq $False){Set-WebServicesVirtualDirectory -Identity $OABDir.Name -OAuthAuthentication $true}
   else {Write-Host 'OAuth für Offlineadressbücher bereits aktiv!' -ForegroundColor Green}
   }
 
# OAuth für Autodiscover-Verzeichnis prüfen und aktivieren, falls erforderlich
$AutoDDirs = Get-AutodiscoverVirtualDirectory

# Für jedes ermittelte Verzeichnis OAuth aktivieren
ForEach ($AutoDDir in $AutoDDirs)
   {
   if ($AutoDDir.OAuthAuthentication -eq $False){Set-WebServicesVirtualDirectory -Identity $AutoDDir.Name -OAuthAuthentication $true}
   else {Write-Host 'OAuth für automatische Ermittlung bereits aktiv!' -ForegroundColor Green}
   }

# OAuth für ActiveSync-Verzeichnis prüfen und aktivieren, falls erforderlich
$ActiveSyncDirs = Get-ActiveSyncVirtualDirectory

# Für jedes ermittelte Verzeichnis OAuth aktivieren
ForEach ($ActiveSyncDir in $ActiveSyncDirs)
   {
   $IntAuthMeth = $ActiveSyncDir.InternalAuthenticationMethods
   $ExtAuthMeth = $ActiveSyncDir.ExternalAuthenticationMethods
   if ($IntAuthMeth -notcontains 'OAuth')
      {
      $IntAuthMeth+='OAuth'
      Set-ActiveSyncVirtualDirectory -Identity $ActiveSyncDir.Name -InternalAuthenticationMethods $IntAuthMeth
      }
   else {Write-Host 'OAuth für ActiveSync (intern) bereits aktiv!' -ForegroundColor Green}
   if ($ExtAuthMeth -notcontains 'OAuth')
      {
      $ExtAuthMeth+='OAuth'
      Set-ActiveSyncVirtualDirectory -Identity $ActiveSyncDir.Name -ExternalAuthenticationMethods $IntAuthMeth
      }
   else {Write-Host 'OAuth für ActiveSync (extern) bereits aktiv!' -ForegroundColor Green}
   }
			

Es ist überdies zu prüfen, ob das Objekt für die Umleitung der Authentifizierung zu Entra ID bereits vorhanden ist oder noch angelegt werden muss:

PowerShell
				# Objekt für evoSTS prüfen
Get-AuthServer | Where-Object {$_.Name -like "EvoSts*"} | fl Name,DomainName,IssuerIdentifier,Realm,TokenIssuingEndpoint,Enabled,IsDefault*
			

Wenn dieses nicht vorhanden ist, muss der Exchange-Hybridbereitstellungsassistent (noch einmal) ausgeführt werden.

Schritt 2: Ergänzung der URLs im Dienstprinzipal

Anschließend muss eine Verbindung zu Entra ID über Microsoft Graph aufgebaut werden, um ggf. fehlende URLs im Dienstprinzipal für Exchange Server/Online zu prüfen und zu ergänzen:

PowerShell
				# # Prüfen, ob benötigte Module installiert sind und Installation, falls nicht
if (!(Get-InstalledModule Microsoft.Graph.Authentication -ErrorAction SilentlyContinue)){Install-Module Microsoft.Graph.Authentication -Scope CurrentUser}
if (!(Get-InstalledModule Microsoft.Graph.Applications -ErrorAction SilentlyContinue)){Install-Module Microsoft.Graph.Applications -Scope CurrentUser}

# Verbindung zu Microsoft Graph aufbauen
Connect-MgGraph -Scopes 'Application.ReadWrite.All'

# Aktuell im Dienstprinzipal hinterlegte URLs prüfen
Get-MgServicePrincipal -Filter "AppId eq '00000002-0000-0ff1-ce00-000000000000'" | select -ExpandProperty ServicePrincipalNames

# Fehlende URL(s) ergänzen
$Principal = Get-MgServicePrincipal -Filter "AppId eq '00000002-0000-0ff1-ce00-000000000000'"
$Principal.ServicePrincipalNames += 'https://autodiscover.microwsoft.de/'    # z.B. URL für Autodiscover
$Principal.ServicePrincipalNames += 'https://mail.microwsoft.de/'            # z.B. allg. URL für Zugriff auf MAPI, EWS, EAS, usw.
Update-MgServicePrincipal -ServicePrincipalId $Principal.Id -ServicePrincipalNames $Principal.ServicePrincipalNames
			

Schritt 3: HMA aktivieren

Sobald alle Voraussetzungen erfüllt sind, kann HMA über die Exchange Management Shell wie folgt aktiviert werden:

PowerShell
				# evoSTS als Standard-Autorisierungs-Endpunkt konfigurieren und OAuth aktivieren
Set-AuthServer -Identity "EvoSts - d1c9beac-0655-48e7-9949-5e497af1d38d" -DomainName '<Standarddomäne, z.B. microwsoft.de>' -IsDefaultAuthorizationEndpoint $true
Set-OrganizationConfig -OAuth2ClientProfileEnabled $true

# Webserver neu starten
iisreset
			

Schritt 4: Verteilung eines Registrierungs-Werts an Endgeräte

Die moderne Authentifizierung ist nun grundlegend verfügbar. Allerdings kann es vorkommen, dass Outlook weiterhin ein älteres Authentifizierungsprotokoll verwendet. Daher ist es sinnvoll, die Verwendung der modernen Authentifizierung zu erzwingen. Hierfür muss ein bzw. Registry-Wert auf den Endgeräten hinzugefügt werden:

Pfad: HKEY_CURRENT_USER\Software\Microsoft\Exchange
Wert: AlwaysUseMSOAuthForAutoDiscover
Typ: REG_DWORD
Inhalt: 1

(OPTIONAL) Schritt 5: Aktivierung von HMA für OWA und ECP

HMA kann auch für OWA und ECP verwendet werden. Allerdings ist hierbei folgendes zu beachten:

  • Die moderne Authentifizierung gilt nicht nur für Benutzer, sondern auch für Administratorkonten. Falls diese gemäß bewährten Methoden nicht in die Cloud synchronisiert werden, können diese sich nicht mehr an der Weboberfläche anmelden.
  • OWA und ECP müssen die gleichen Authentifizierungsverfahren verwenden. Es kann also nicht OAuth für das eine, jedoch nicht für das andere Verzeichnis aktiviert sein. um bspw. Administratorkonten weiterhin einen Zugriff auf ECP über Kerberos zu ermöglichen.

Falls für OWA und ECP andere URLs verwendet werden, müssen diese wie im Schritt 2 gezeigt ebenfalls zum Dienstprinzipal hinzugefügt werden.

Ansonsten kann OAuth wie folgt aktiviert werden (die Reihenfolge ist wichtig – zuerst ECP, dann OWA):

PowerShell
				# 1) ECP-Verzeichnis(se) konfigurieren
Get-EcpVirtualDirectory | Set-EcpVirtualDirectory -AdfsAuthentication $false -BasicAuthentication $false -FormsAuthentication $false -DigestAuthentication $false -OAuthAuthentication $true

# 2) OWA-Verzeichnis(se) konfigurieren
Get-OwaVirtualDirectory | Set-OwaVirtualDirectory -AdfsAuthentication $false -BasicAuthentication $false -FormsAuthentication $false -DigestAuthentication $false -OAuthAuthentication $true

# Webserver neu starten
iisreset
			

Die folgenden Kapitel beschreiben die Einrichtung der modernen Authentifizierung auf Basis der Active Directory-Verbunddienste (ADFS).

Voraussetzungen

Es wird angenommen, dass die folgenden Voraussetzungen bereits erfüllt sind:

  • Existierende(r) und grundlegend eingerichtete(r) ADFS-Server bzw. -Farm mit gültigen Zertifikaten

Sämtliche Schritte müssen mittels PowerShell durchgeführt werden.

Schritt 1: Auswahl der Methodik für einmalige Anmeldung

Um Benutzern den Zugriff zu erleichtern, kann eine einmalige Anmeldung eingerichtet werden. Anmeldedaten werden hierbei automatisch durchgereicht, so dass der Benutzer nicht erneut zu einer Authentifizierung aufgefordert wird. Dies ist über die folgenden Verfahren möglich:

  • Geräteregistrierung – Der Benutzer führt einen Workplace Join mit seinem Gerät durch. Dies muss explizit in ADFS aktiviert werden.
  • KMSI – Keep me signed in; ADFS erstellt bei der Authentifizierung des Benutzers ein persistentes Cookie. Dieses kann 8 Stunden bis 7 Tage gültig sein.

 

Die Geräteregistrierung ist aufwändiger in der Konfiguration, verbessert jedoch die Sicherheit. Details zur Einrichtung (auch von KMSI) werden in dem folgenden Artikel gegeben: Aktivieren der modernen Authentifizierung in Exchange Server lokal | Microsoft Learn

Schritt 2: Erstellung der ADFS-Outlook-Anwendungsgruppe

Als nächstes muss die notwendige Konfiguration in ADFS angelegt werden. Hierzu sind die folgenden Befehle auszuführen:

PowerShell
				# Neue Anwendungsgruppe erstellen
New-AdfsApplicationGroup -Name 'Outlook' -ApplicationGroupIdentifier 'Outlook' -Disabled:$false

# Bereiche erstellen
Add-AdfsScopeDescription -Name 'EAS.AccessAsUser.All' -Description 'EAS-Bereich'
Add-AdfsScopeDescription -Name 'EWS.AccessAsUser.All' -Description 'EWS-Bereich'
Add-AdfsScopeDescription -Name 'offline_access' -Description 'Offline-Zugriff'

# Anwendung erstellen - Outlook Desktop
Add-AdfsNativeClientApplication -Name 'Outlook Desktop' -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')

# (Optional) Anwendung erstellen - iOS Mail App
Add-AdfsNativeClientApplication -Name 'iOS/macOS - Mail-App' -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/')

# URLs definieren - hier die URL(s) eintragen, die für den Zugriff auf Exchange und Autodiscover verwendet werden
$EXSServiceFQDNs = @('https://autodiscover.microwsoft.de/','https://mail.microwsoft.de/')

# Transformations-Regeln erstellen
$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');
'@

# Web API-Anwendungen erstellen
foreach ($FQDN in $EXSServiceFQDNs) 
   {
   Add-AdfsWebApiApplication -Name 'Outlook - Web-API ($((New-Guid).ToString('N')))' -ApplicationGroupIdentifier 'Outlook' -Identifier $fqdn -IssuanceTransformRules $issuanceTransformRules -AccessControlPolicyName 'Permit Everyone'
   }

# Clientberechtigungen in Web API-Anwendungen hinzufügen
$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'
    }
}
			

Schritt 3: Erstellung von Richtlinien für die selektive Freischaltung der modernen Authentifizierung

Standardmäßig versuchen Clients, stets OAuth für die Authentifizierung zu verwenden. Es mag jedoch Clients geben, die nicht mit der ADFS-Variante kompatibel sind und sich daher nicht verbinden können. Daher sind Richtlinien zu erstellen, um die moderne Authentifizierung grundsätzlich zu blockieren und nur für ausgewählte Postfächer freigeben zu können:

PowerShell
				# Richtlinie zum Blockieren der modernen Authentifizierung erstellen
New-AuthenticationPolicy 'POL-EXO-BLOCK-ModernAuthentication' -BlockModernAuthWebServices -BlockModernAuthActiveSync -BlockModernAuthAutodiscover -BlockModernAuthImap -BlockModernAuthMapi -BlockModernAuthOfflineAddressBook -BlockModernAuthPop -BlockModernAuthRpc

# Richtlinie global aktivieren
Set-OrganizationConfig -DefaultAuthenticationPolicy 'POL-EXO-BLOCK-ModernAuthentication'

# Richtlinie zum selektiven Erlauben der modernen Authentifizierung erstellen
New-AuthenticationPolicy 'POL-EXO-ALLOW-ModernAuthentication'

# Postfächern die Richtlinie zuweisen
Set-Mailbox -Identity <Name> -AuthenticationPolicy 'POL-EXO-ALLOW-ModernAuthentication'
			

Schritt 4: Aktivierung von OAuth für die virtuellen Verzeichnisse

OAuth muss für die virtuellen Verzeichnisse hinzugefügt werden. Mit den folgenden Befehlen kann OAuth automatisch ergänzt werden, falls es noch fehlt:

PowerShell
				# OAuth für MAPI aktivieren, falls noch nicht aktiv
$MapiDirs = Get-MapiVirtualDirectory

# Für jedes ermittelte Verzeichnis OAuth hinzufügen
ForEach ($MapiDir in $MapiDirs)
   {
   $IISAuthMeth = $MapiDir.IISAuthenticationMethods
   if ($IISAuthMeth -notcontains 'OAuth')
      {
      $IISAuthMeth+='OAuth'
      Set-MapiVirtualDirectory -Identity $MapiDir.Name -IISAuthenticationMethods $IISAuthMeth
      }
   else {Write-Host 'OAuth für MAPI bereits aktiv!' -ForegroundColor Green}
   }

# OAuth für Webdienste-Verzeichnis prüfen und aktivieren, falls erforderlich
$WebSvcDirs = Get-WebServicesVirtualDirectory

# Für jedes ermittelte Verzeichnis OAuth aktivieren
ForEach ($WebSvcDir in $WebSvcDirs)
   {
   if ($WebSvcDir.OAuthAuthentication -eq $False){Set-WebServicesVirtualDirectory -Identity $WebSvcDir.Name -OAuthAuthentication $true}
   else {Write-Host 'OAuth für Webdienste bereits aktiv!' -ForegroundColor Green}
   }
   
# OAuth für Offlineadressbuch-Verzeichnis prüfen und aktivieren, falls erforderlich
$OABDirs = Get-OABVirtualDirectory

# Für jedes ermittelte Verzeichnis OAuth aktivieren
ForEach ($OABDir in $OABDirs)
   {
   if ($OABDir.OAuthAuthentication -eq $False){Set-WebServicesVirtualDirectory -Identity $OABDir.Name -OAuthAuthentication $true}
   else {Write-Host 'OAuth für Offlineadressbücher bereits aktiv!' -ForegroundColor Green}
   }
 
 # OAuth für Autodiscover-Verzeichnis prüfen und aktivieren, falls erforderlich
$AutoDDirs = Get-AutodiscoverVirtualDirectory

# Für jedes ermittelte Verzeichnis OAuth aktivieren
ForEach ($AutoDDir in $AutoDDirs)
   {
   if ($AutoDDir.OAuthAuthentication -eq $False){Set-WebServicesVirtualDirectory -Identity $AutoDDir.Name -OAuthAuthentication $true}
   else {Write-Host 'OAuth für automatische Ermittlung bereits aktiv!' -ForegroundColor Green}
   }

# OAuth für ActiveSync-Verzeichnis prüfen und aktivieren, falls erforderlich
$ActiveSyncDirs = Get-ActiveSyncVirtualDirectory

# Für jedes ermittelte Verzeichnis OAuth aktivieren
ForEach ($ActiveSyncDir in $ActiveSyncDirs)
   {
   $IntAuthMeth = $ActiveSyncDir.InternalAuthenticationMethods
   $ExtAuthMeth = $ActiveSyncDir.ExternalAuthenticationMethods
   if ($IntAuthMeth -notcontains 'OAuth')
      {
      $IntAuthMeth+='OAuth'
      Set-ActiveSyncVirtualDirectory -Identity $ActiveSyncDir.Name -InternalAuthenticationMethods $IntAuthMeth
      }
   else {Write-Host 'OAuth für ActiveSync (intern) bereits aktiv!' -ForegroundColor Green}
   if ($ExtAuthMeth -notcontains 'OAuth')
      {
      $ExtAuthMeth+='OAuth'
      Set-ActiveSyncVirtualDirectory -Identity $ActiveSyncDir.Name -ExternalAuthenticationMethods $IntAuthMeth
      }
   else {Write-Host 'OAuth für ActiveSync (extern) bereits aktiv!' -ForegroundColor Green}
   }
			

Schritt 5: Konfiguration von Exchange Server für die Verwendung der modernen Authentifizierung

Nun kann in der Exchange-Organisation der ADFS-Server für die moderne Authentifizierung hinterlegt werden. Hierzu sind die folgenden Befehle auszuführen:

PowerShell
				# Neues Authentifizierungsserverobjekt erstellen
New-AuthServer -Type ADFS -Name '<Name des ADFS-Servers/der Farm>' -AuthMetadataUrl 'https://<URL des ADFS-Servers/der Farm>/FederationMetadata/2007-06/FederationMetadata.xml'

# Authentifizierungsserverobjekt als Standard-Autorisierungs-Endpunkt konfigurieren und OAuth aktivieren
Set-AuthServer -Identity '<Name des ADFS-Servers/der Farm>' -IsDefaultAuthorizationEndpoint $true
Set-OrganizationConfig -OAuth2ClientProfileEnabled $true

# (Optional) Falls macOS verwendet wird, folgende Befehle ausführen
New-SettingOverride -Name 'EnableKeepADFSHeadersOnTokenExpiry' -Component 'OAuth' -Section 'KeepADFSHeadersOnTokenExpiry' -Parameters @('Enabled=true') -Reason 'Outlook für macOS'
Get-ExchangeDiagnosticInfo -Process Microsoft.Exchange.Directory.TopologyService -Component VariantConfiguration -Argument Refresh

# Webserver neu starten
iisreset
			

Schritt 6: Einrichtung der modernen Authentifizierung auf Endgeräten

Um die moderne Authentifizierung über ADFS auf Endgeräten zu aktivieren, müssen noch einige Einstellungen als Registrierungs-Werte verteilt werden:

Es werden zwei Schlüssel angelegt, die die URL zu ADFS enthalten – einmal mit und einmal ohne abschließendes ‚/‘

Pfad: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\AAD\AuthTrustedDomains
Wert: <URL des ADFS-Servers/der Farm>/
Typ: Schlüssel

Pfad: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\AAD\AuthTrustedDomains
Wert: <URL des ADFS-Servers/der Farm>
Typ: Schlüssel
Pfad: HKCU\SOFTWARE\Microsoft\Office\16.0\Common\Identity
Wert: EnableExchangeOnPremModernAuth
Typ: REG_DWORD
Inhalt: 1

Für macOS ist ADFS wie folgt zu hinterlegen (über Terminal):

defaults write com.microsoft.Outlook ADFSAuthorizedURLs -array <URL des ADFS-Servers/der Farm>

(OPTIONAL) Schritt 7: Aktivierung der anspruchsbasierten Authentifizierung für OWA und ECP

Eine ADFS-basierte Anmeldung kann auch für OWA und ECP eingerichtet werden.

Die Konfiguration kann über die ADFS-Konsole vorgenommen werden und wird im offiziellen Artikel im Detail beschrieben: Verwenden der anspruchsbasierten AD FS-Authentifizierung mit Outlook im Web | Microsoft Learn

 

Hybride Infrastruktur, Microsoft 365 und Themen aus der Praxis – all das und mehr findest Du in meinem Blog: https://crowinthe.cloud

Inhalt