Hallo Leser,
wie im Beitrag zu Exchange Server 2019 Cu13 angekündigt möchte ich euch heute aufzeigen wie oAuth 2.0 für Outlook konfiguriert wird.
Überblick
Mit der Einführung von Exchange Server 2019 Cu13 hat Microsoft in Outlook die Unterstützung für oAuth 2.0 oder auch Modern Auth On-Premises hinzugefügt.
Damit ist es nun möglich Outlook Clients die per MAPIoverHTTPS angebunden sind via Bearer Token zu Authentifizieren – On-Premises und ohne Azure AD oder Cloud Services!!!
Voraussetzungen
Um die Moderne Authentifizierung zu verwenden müssen einige Voraussetzungen erfüllt werden:
- ADFS / WAP unter Windows Server 2019 oder höher
- Exchange Server 2019 CU13 oder höher
- Outlook Build Nummer 16327.20200 oder höher
- Windows 11 22H2 inkl. März 23 Update (KB5023706 ) oder später
Meine Testumgebung
Ich verwende eine ähnlich aufgebaute Testumgebung wie früher. Wobei alle Server und Systeme über derzeit aktuelle Updates und Patches beinhalten um die o.g. Voraussetzungen zu erfüllen. Achtung: Alle Windows Systeme sind in Englisch installiert!
Einige Einstellungen sind ggf. leicht verändert, wie bspw. die ADFS URI. Beim Aufbau hab ich mich jedoch weiterhin an meinen vorhergegangen Artikeln orientiert. Der ADFS / WAP Aufbau unter Windows Server 2022 ist identisch zu Windows Server 2016.
Mein Windows Client ist Windows 11 22H2 mit aktuellen Updates.
ADFS 4.0 mit Exchange 2016 – Konfigurationsübersicht – Andi’s iT Blog (asichel.de)
Konfiguration
Die Konfiguration umfasst mehrere Schritte.
- Zum einem die Application Group im ADFS,
- die Konfiguration im AD bzw. den GPOs für die Clientsteuerung.
- Die Konfiguration am Exchange
Für die Konfigurationen findet ihr jeweils die passenden PowerShell Scripts die für euch geschrieben habt. Die Details dazu entnehmt bitte dem jeweiligen Konfigurationsschritt.
Schritt 1 – AD FS Appliaction Group
Die Konfiguration wird vollständig über die PowerShell abgeschlossen. Referenz ist die Microsoft Konfiguration.
<# .SYNOPSIS Sets up Microsoft ADFS Application Groups via PowerShell. .DESCRIPTION Adds Outlook Appliaction Group to ADFS Server Adds Outlook - Web Api to ADFS Application Group Adds Outlook Native Application to Application Group .EXAMPLE .\OutlookAppADFSrules .INPUTS Inputs (if any) .OUTPUTS Output (if any) .NOTES This script should be run on the ADFS system. © Andres Sichel // blog.asichel.de // blog@asichel.de #> #Define Outlook URIs $OutlookMAPIURI = "https://mail.asichel.de/" $AutodiscoverURI = "https://autodiscover.asichel.de/" #Create Application Group Name $ClientRoleIdentifier = "Outlook" # Define GUIDs for Group and Native Application $Groupidentifier = (New-Guid).Guid $OutlookNativeID = "d3590ed6-52b3-4102-aeff-aad2292ab01c" #pre defined by microsoft # This URI are pre defined by Microsoft: https://learn.microsoft.com/en-us/Exchange/plan-and-deploy/post-installation-tasks/enable-modern-auth-in-exchange-server-on-premises?view=exchserver-2019 $redirect1 = "urn:ietf:wg:oauth:2.0:oob" $redirect2 = "ms-appx-web://Microsoft.AAD.BrokerPlugin/d3590ed6-52b3-4102-aeff-aad2292ab01c" #Create the new Application Group in ADFS New-AdfsApplicationGroup -Name $ClientRoleIdentifier -ApplicationGroupIdentifier $ClientRoleIdentifier -Description "ADFS App for Microsoft Outlook On-Premises" #Define Transformation Rules $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 = "http://schemas.microsoft.com/identity/claims/scope", Value = "user_impersonation"); '@ #Create the Outlook Web API WebApplication $ADFSWebApp = Add-AdfsWebApiApplication -Name "$ClientRoleIdentifier - Web API" -ApplicationGroupIdentifier $ClientRoleIdentifier -Identifier $OutlookMAPIURI,$AutodiscoverURI -AccessControlPolicyName 'Permit everyone' -IssuanceTransformRules $IssuanceTransformRules #Grant the ADFS Applciation the allatclaims and openid permissions Grant-AdfsApplicationPermission -AllowAllRegisteredClients -ServerRoleIdentifier $AutodiscoverURI -ScopeNames @('user_impersonation', 'openid') # Add Native Application to the Group Add-AdfsNativeClientApplication -ApplicationGroupIdentifier $ClientRoleIdentifier -Name "$ClientRoleIdentifier - Native application" -Identifier $OutlookNativeID -RedirectUri $redirect1,$redirect2 Write-host "AD FS 2019 Application Group for Outlook was addedd." -ForegroundColor Green
Damit ist die Konfiguration im AD FS weitestgehend abgeschlossen. Als nächstes widmen wir uns mal dem Client zu der das Feature unterstützen soll.
Schritt 2- Client konfigurieren
Der Client wird mittels GPO konfiguriert. Dafür erstelle ich zunächst eine GPO mit dem Fokus auf die Computer-Objekte und konfiguriere diese wie folgt:
- GPO erstellen und benennen, bspw.: „Outlook Modern Auth“
- GPO bearbeiten und zu folgenden Pfad wechseln:
- Computer Configuration –> Preferences –> Windows Settings –> Registry
- New Registry Item (Bild 3):
- Action: Update
- Hive: HKEY_LOCAL_MACHINE
- Key Path: SOFTWARE\Policies\Microsoft\AAD\AuthTrustedDomains\https://sts.asichel.de
- Value name: Default
- Value type: REG_SZ
- Wiederholen für ein zweites Item:
- Action: Update
- Hive: HKEY_LOCAL_MACHINE
- Key Path: SOFTWARE\Policies\Microsoft\AAD\AuthTrustedDomains\https://sts.asichel.de/
- Value name: Default
- Value type: REG_SZ
- Auf die Clients ausrollen (Bild 4)
Im zweiten Schritt wird eine weitere GPO erstellt, mit Fokus auf die Benutzer:
- GPO erstellen und benennen, bspw.: „Outlook Modern Auth Enable“
- GPO bearbeiten und zu folgenden Pfad wechseln:
- User Configuration –> Preferences –> Windows Settings –> Registry
- New Registry Item (Bild 5):
- Action: Update
- Hive: HKEY_LOCAL_USER
- Key Path: SOFTWARE\Microsoft\Office\16.0\Common\Identity
- Value name: EnableExchangeOnPremModernAuth
- Value type: REG_DWORD
- Value data: 1
- Auf die User ausrollen (Bild 6)
Damit ist die Clientkonfiguration abgeschlossen. Ich vergewisser mich nochmal das mein Outlook die Anforderungen erfüllt:
Schritt 3 – Exchange Server konfiguration
Authentication Policy
Im dritten Schritt konfiguriere ich die Authentication Policy in Exchange Server On-Premises. Wichtig ist das wir ModernAuth zunächst für alle User deaktivieren und anschließend für eine Gruppe von User aktivieren (Bild 7):
New-AuthenticationPolicy "Block modern auth for all users" -BlockModernAuthWebServices -BlockModernAuthActiveSync -BlockModernAuthAutodiscover -BlockModernAuthImap -BlockModernAuthMapi -BlockModernAuthOfflineAddressBook -BlockModernAuthPop -BlockModernAuthRpc
Anschließend setze ich diese Authentication Policy als Default in der Organization Config (Bild 8):
Set-OrganizationConfig -DefaultAuthenticationPolicy "Block modern auth for all users"
Nun erstelle ich eine eigene Authentication Policy (Bild 9):
New-AuthenticationPolicy "Allow Modern auth"
Auth Server
Nun muss Exchange Server nur noch wissen das Modern Auth anfragen an einen Authentication Provider weitergeleitet werden müssen. Dafür wird ein neuer Auth-Provider erstellt (Bild 10):
New-AuthServer -Type ADFS -Name "sichel STS" -AuthMetadataUrl https://sts.asichel.de/FederationMetadata/2007-06/FederationMetadata.xml
Anschließend muss der Auth-Server noch als Standard definiert werden (Bild 11):
Set-AuthServer -Identity "sichel STS" -IsDefaultAuthorizationEndpoint $true
Und sofern noch nicht aktiv oAuth2Client Profile aktiviert werden (Bild 12):
Set-OrganizationConfig -OAuth2ClientProfileEnabled $true
User für oAuth 2.0 bzw. modern Auth aktivieren
Ich aktiviere einen User für Modern Auth:
Set-User andi.sichel -AuthenticationPolicy "Allow Modern auth"
Da wir nun die Konfiguration angepasst haben dauert es bis zu 30 Minuten eh die Änderungen wirksam sind. Wer nicht warten will, startet den Server neu bzw. führt ein „iisreset“ durch.
Schritt 4- Test am Client
Mein Windows Client ist passend den Anforderungen vorbereitet und ich kann den ersten Test ausführen.
Hier sieht man wie die Mailbox vor der Konfiguration verbunden war:
Nach erfolgreicher Aktivierung der Richtlinie für den User, muss dieser sich ggf. per AD FS Authentifizierung anmelden und erhält eine Aufforderung dazu (Bild 14).
Nachdem der Benutzer authentifiziert wurde wird die Authentifizierungsmethode in Outlook nun auch auf „Bearer“ umgestellt und der User ist mittels Modern Auth verbunden. Dies gilt selbstverständlich nur für die Benutzer welche die o.g. Richtlinie erhalten haben.
Damit ist die Konfiguration abgeschlossen und die Verbindungen gegenüber Exchange Server On-Premises besser abgesichert.
Fazit und Überlegungen
Sicherlich ist der Einsatz einer AD FS infrastruktur nicht mehr Zeitgemäß und die meisten Kunden sind mittlerweile in der Cloud. Wer jedoch On-Premises ist und bleibt, ggf. AD FS & WAP noch im Einsatz hat ist gut beraten die Authentifizierung umzustellen. Durch 3rd Party Tools lassen sich so im AD FS MFA Lösungen integrieren und bedingte Zugriffe realisieren um die Zugriffe auf Postfächer abzusichern.
Mittels DeviceRegistration Services und Zertifikatsbasierter Authentifizierung, Gruppenzugehörigkeiten und Netzwerkbedingungen lassen sich so bedingte Zugriffsregeln fernab jeder Azure Cloud Lösung realisieren.
Zu bedenken sind dabei auch Themen wie:
- Firewall & Web Proxys
- Zertifikate
- DNS Planung
- Loadbalancer in HA-Umgebungen für AD FS & WebApplication Proxy
Die Umsetzung im Web Application Proxy folgt im zweiten Teil und zeigt so auf wie der User sich von extern mittels Token am On-Premises Exchange Server authentifiziert.
Gruß aus Bielefeld
Andi
Hi,
so wie es aussieht, liegt es an der Betriebssystemsprache des ADFS Servers. Wenn dieser in deutsch installiert ist, tritt der Fehler auf, in Englisch gehts fehlerrei.
Hi,
ich kann mich Sven und Björn nur anschließen. Identischer Fehler. Alles nochmal in einer Testumgebung nach der MS Anleitung inklusive enterpriseregistration im Zertifikat usw. konfiguriert und scheitere derzeit beim setzen des New-AuthServer in Exchange 2019. Public Teil des TokenSigning Certs des ADFS ist am Exchange unter trusted Roots importiert.
Das Metadatendokument für die Authentifizierung kann nicht analysiert werden.
+ CategoryInfo : ParserError: (:) [New-AuthServer], AuthMetadataParserException
+ FullyQualifiedErrorId : [Server=ExchangeServer1,RequestId=8b062b9e-ef45-45ae-ba27-39702408c58c,TimeStamp=18.01.2024 13:29:49
] [FailureCategory=Cmdlet-AuthMetadataParserException] D414466C,Microsoft.Exchange.Management.SystemConfigurationT
asks.NewAuthServer
Hey,
Danke für deine Antwort.
Die STS URI kann intern und extern aufgelöst werden. Ein Abrufen der XML ist über den Webbrowser ohne Probleme möglich.
LG
Hey Andi,
bei mir kommt auch die Meldung von Björn:
C:\>New-AuthServer -Type ADFS -Name FS1 -AuthMetadataUrl https://xxx.xxxx.com/FederationMetadata/2007-06/FederationMetadata.xml
Das Metadatendokument für die Authentifizierung kann nicht analysiert werden.
Ich verwende meine Auth-URI. Ich habe einen Proxy im Einsatz.
Müssen vorher die Application Groups erstellt werden?
Gruß Sven
Hey Sven,
die STS URI muss intern als auch Extern aufgelöst werden können. Schau doch mal bei der DNS Auflösung, die URi muss erreichbar sein. Du kannst diese andernfalls auch in den ADFS-Settings einlesen.
LG
Hey,
Danke für deine Antwort.
Die STS URI kann intern und extern aufgelöst werden. Ein Abrufen der XML ist über den Webbrowser ohne Probleme möglich.
LG
Grüße,
ich scheitere leider bei
„New-AuthServer -Type ADFS -Name „sichel STS“ -AuthMetadataUrl https://sts.asichel.de/FederationMetadata/2007-06/FederationMetadata.xml“
mit dem Fehler:
Das Metadatendokument für die Authentifizierung kann nicht analysiert werden.
+ CategoryInfo : ParserError: (:) [New-AuthServer], AuthMetadataParserException
Das manuelle Abrufen der Metadaten über die URL funktioniert ohne Probleme. Das Zertifikat vom ADFS Server ist auch auf dem Exchange Server hinterlegt.
Hey Björn,
wie schaut denn dein CMDlet genau aus? Nutzt du deine Auth-URI? Hast du ggf. ein Proxy Server im Einsatz?