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.

Du möchtest wissen wie ADFS und WAP mit Exchange zusammenarbeiten – Schau in meine Blog Serie:

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:

  1. GPO erstellen und benennen, bspw.: „Outlook Modern Auth“
  2. GPO bearbeiten und zu folgenden Pfad wechseln:
    1. Computer Configuration –> Preferences –> Windows Settings –> Registry
    2. New Registry Item (Bild 3):
      1. Action: Update
      2. Hive: HKEY_LOCAL_MACHINE
      3. Key Path: SOFTWARE\Policies\Microsoft\AAD\AuthTrustedDomains\https://sts.asichel.de
      4. Value name: Default
      5. Value type: REG_SZ
    3. Wiederholen für ein zweites Item:
      1. Action: Update
      2. Hive: HKEY_LOCAL_MACHINE
      3. Key Path: SOFTWARE\Policies\Microsoft\AAD\AuthTrustedDomains\https://sts.asichel.de/
      4. Value name: Default
      5. Value type: REG_SZ
  3. Auf die Clients ausrollen (Bild 4)
Wichtig ist hier das hinzufügen der AD FS Uri, sowohl mit als auch ohne endenden “ Slash /“

Im zweiten Schritt wird eine weitere GPO erstellt, mit Fokus auf die Benutzer:

  1. GPO erstellen und benennen, bspw.: „Outlook Modern Auth Enable“
  2. GPO bearbeiten und zu folgenden Pfad wechseln:
    1. User Configuration –> Preferences –> Windows Settings –> Registry
    2. New Registry Item (Bild 5):
      1. Action: Update
      2. Hive: HKEY_LOCAL_USER
      3. Key Path: SOFTWARE\Microsoft\Office\16.0\Common\Identity
      4. Value name: EnableExchangeOnPremModernAuth
      5. Value type: REG_DWORD
      6. Value data: 1
  3. 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"
Beim erstellen einer neuen Authentication Policy steht „Block*“ auf „false“ und aktiviert somit die Verwendung von o.Auth 2.0 bzw. 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:

Bild 13: Outlook Connection before activate modern Auth

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.

Bild 15: Outlook on Premises Exchange Bearer token

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