Hallo Blogleser, Microsoft hat bekanntlich das Service Pack 1 für Exchange Server 2013 veröffentlicht. Neben den großen Highlights wie MAPI over HTTP ist auch die Native Unterstützung für ADFS mitgekommen. Im vergangenem Beitrag habe ich bereits über die Veröffentlichung von Exchange 2013 mit WAP berichtet und versprochen diesen Artikel Zeitnah zu veröffentlichen.

So ist die Testumgebung für WAP mit ADFS und Exchange aufgabut.

So ist die Testumgebung für WAP mit ADFS und Exchange aufgabut.

Nun will ich meine Umgebung ein wenig „aufmotzen“. Zunächst habe ich auf meinem Exchange Server 2013 das SP 1 installiert, wisst Ihr ja bereits (Transportdienst Fehler). Anschließend habe ich sichergestellt das meine Veröffentlichung über WAP weiterhin einwandfrei funktioniert, tut es natürlich :) Nun geht es damit weiter eine „Vertrauensstellung der Vertrauenden Seite (Add Relaying Party Trust Wizard) für OWA im AD FS zu erstellen. Heute arbeite ich Hauptsächlich mit der Power Shell, weil es einfach einfach ist :)  Im Bild sieht man nochmal den Aufbau der Umgebung.

Ich habe lange Zeit benötigt um die AD FS Implementierung lauffähig zu bringen. Der TechNet-Artikel von Microsoft ist einfach Falsch, es funktioniert bis dato bei mir nicht obwohl ich es genau so durchgeklickt habe. Anfangs hatte ich Schwierigkeiten mit der Umsetzung der Benutzerdefinierten Regeln und den Ansprüchen. Da ich alles einige mal versucht habe, ist das Script entstanden, ich hoffe es hilft Euch! Für diejenigen die sich selbst am Artikel vom TechNet versuchen wollen: http://technet.microsoft.com/en-us/library/dn635116(v=exchg.150).aspx.

Viel Spaß bei der kommenden Umsetzung.

Schritt 1 – Informationen auslesen

Wichtig für die Konfiguration, da wir die Zertifikats-Thumbprints benötigen, den ADFS-Issuer, die OWA & ECP Website. In meinem Beispiel ist dies zwar klar, allerdings möchte ich kurz erörtern wie mit Hilfe der Power Shell die Informationen ausgelesen werden können.

    1. OWA & ECP Url auslesen, dazu am Exchange-Server anmelden und die EMS öffnen
      1. Get-OwaVirtualDirectory | ft name,externalurl
      2. Get-EcpVirtualDirectory | ft name,externalurl
    2. Zertifikat am WAP-Server finden ( bei mir das Wildcard-Zertifikat) (Bild 1)
      1. dir cert:localmachine\my
    3. Zertifikat am ADFS-Server finden (Token-Signing) (Bild 2)
      1. Get-AdfsCertificate -CertificateType "Token-Signing" | ft certificatetype,thumbprint
    4. ADFS-Url finden (Bild 3)
      1. Get-AdfsProperties | ft hostname,FederationPassiveAddress

Damit habe ich folgende Informationen:

  • owa (Default Web Site) = https://mail.sichel.com/owa
  • ecp (Default Web Site) = https://mail.sichel.com/ecp
  • Thumbprint WAP-Server = B2D96D09F600EB701ECC0F9265A33207BD137D4B
  • Token-Signing ADFS-Server = F59567CD210DF68E745F4EC4FD6A1F60D1372044
  • ADFS-Host = adfs.sichel.com/adfs/ls/

 

Schritt 2 – ADFS Anpassung

Um mit den Informationen aus Schritt 1 arbeiten zu können, ist ein Power Shell Script hilfreich. Es ist einfacher die Regeln im ADFS mit der PowerShell zu setzen als diese manuel zu klicken. Zumal die Regeln auf jedem System Identisch sind, mal abgesehen von den URLs & Zertifikaten.

Ein kleines Script hilft mir nun:

$OWA = "https://mail.sichel.com/owa"
$ECP = "https://mail.sichel.com/ecp"
$AusstellerRegel=@'
    @RuleTemplate = "AllowAllAuthzRule"

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

    $AnspruchsRegel=@'
    @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 = "ActiveDirectoryGroupSID"
    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/groupsid"), query = ";tokenGroups(SID);{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);
'@

    Add-ADFSRelyingPartyTrust -Name "Outlook Web App" -Enabled $true -Notes "Vertrauensstellung für $OWA" -WSFedEndpoint $OWA -Identifier $OWA -IssuanceTransformRules $AnspruchsRegel -IssuanceAuthorizationRules $AusstellerRegel
    Add-ADFSRelyingPartyTrust -Name "Exchange Systemsteuerung" -Enabled $true -Notes "Vertrauensstellung für $ECP" -WSFedEndpoint $ECP -Identifier $ECP -IssuanceTransformRules $AnspruchsRegel -IssuanceAuthorizationRules $AusstellerRegel
    Write-host "ADFS Konfiguration ausgeführt."

Damit habe ich nun die Vertrauensstellungen im ADFS hinzugefügt (Bild 4), diese enthalten die Anspruchsregeln (Bild 5). In diesen sind dann die Benutzerdefinierten Regeln zu finden (Bild 6).

Schritt 3 – WAP anpassen

Nachdem also ADFS angepasst ist, und das ging mit dem PS-Script deutlich einfacher :), fahre ich mit dem Scripting fort. Auch den Webanwendungsproxy bearbeite ich nun mit der guten jungen „Kraftmuschel“. Es müssen zwei neue Regeln hinzugefügt werden, basierend auf den neuen Vertrauensstellungen aus Schritt 2. Es ist das Identische Verfahren wie im ersten Beitrag zu WAP, halt nur mit der Shell. Wichtig ist, sollten hier noch die Regeln aus meinem vorherigen Beitrag existieren, müssen diese gelöscht werden. Diese beziehen sich noch auf die „alte“ Vertrauensstellung!!!

$WAPCert = "B2D96D09F600EB701ECC0F9265A33207BD137D4B"
$OWA = "https://mail.sichel.com/owa"
$ECP = "https://mail.sichel.com/ecp"

Add-WebApplicationProxyApplication -BackendServerUrl "$OWA/" -ExternalCertificateThumbprint $WAPCert -ExternalUrl "$OWA/" -Name 'OWA Sichel' -ExternalPreAuthentication ADFS -ADFSRelyingPartyName 'Outlook Web App'
Add-WebApplicationProxyApplication -BackendServerUrl "$ECP/" -ExternalCertificateThumbprint $WAPCert -ExternalUrl "$ECP/" -Name 'ECP Sichel' -ExternalPreAuthentication ADFS -ADFSRelyingPartyName 'Exchange Systemsteuerung'
Write-host "WAP Regeln erfolgreich hinzugefügt"

Damit sind die neuen regeln auch schon hinterlegt :) (Bild 7)

Schritt 4 – Exchange Server anpassen

Damit die Exchange Organisation auch mit unseren ADFS-Tokens umgehen kann, muss dieser sich auf den ADFS-Austeller einspielen, dies ist eine Organisationskonfiguration, gilt also für alle Exchange Server. Dafür muss ich mich mal wieder der Shell bemühen, eine GUI für die Umsetzung existiert nicht. Zudem muss die Authentifizierungsart der Virtuellen Verzeichnisse umgestellt werden, so dass diese ausschließlich ADFS akzeptieren.

Wichtig! Das ADFS Signing Certificate muss am Exchange CAS in vertrauenswürdige Stammzertifizierungsstellen importiert werden!

Achtung, sollten folgende Befehle in einer *.ps1 Datei hinterlegt werden, diese mit der EMS öffnen und nicht mi der „normalen“ Power Shell.

$OWA = "https://mail.sichel.com/owa"
$ECP = "https://mail.sichel.com/ecp"
$ADFSSigningCert = "F59567CD210DF68E745F4EC4FD6A1F60D1372044"
$ADFSUrl="https://adfs.sichel.com/adfs/ls/"
$URLs = @($OWA,$ECP)

    Set-OrganizationConfig -AdfsIssuer $ADFSUrl -AdfsAudienceUris $URLs -AdfsSignCertificateThumbprint $ADFSSigningCert
    Write-host "Exchange Organisationskonfiguration erfolgreich"

    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 
    Write-host "Exchange Server Virtuelle Verzeichnisse erfolgreich konfiguriert, IIS Neustart bitte nicht vergessen"

Anschließend noch die IIS-Dienste neu starten (iisreset /noforce).

Nun kann ich mir mit Hilfe der Befehle

Get-OwaVirtualDirectory | fl *auth*
Get-EcpVirtualDirectory | fl *auth*

die Authentifizierungskonfiguration ansehen (Bild 8). Der Befehl

Get-OrganizationConfig | fl *ADFS*

zeigt mir die neue Organisationskonfiguration an (Bild 9).

 Schritt 5 – Testen

Anschließend kann ich mich sowohl von intern als auch von Extern am Exchange anmelden. Ich werde immer zum ADFS umgeleitet um meine Benutzerdaten einzugeben. Das schöne ist, beim Abmelden bekomme ich nun nicht mehr die Meldung: „Schließen Sie das Browserfenster“ sondern ich werde vollständig abgemeldet und zu der ADFS Website umgeleitet (Bild 10).

Wie üblich alle Bilder in der Übersicht.