Januar 4, 2025

Certificate based Authentication in Exchange Online PowerShell

Spätestens seit Microsofts Initiative zur Deaktivierung von Basic Authentication in Exchange Online müssen moderne Authentifizierungsverfahren auch für die Verbindung per Powershell verwendet werden. CBA für EXO PS ist insbesondere für Automatisierungsszenarien extrem nützlich.

PowerShell-Skripte, die z.B. wiederkehrende Aufgaben in Exchange Online durchführen, können so im Rahmen von Scheduled Tasks aufgerufen werden. Die Authentifizierung beim Verbindungsaufbau erfolgt per Zertifikat – das ist nicht nur bequem, sondern auch sicherer als abgespeicherte Credentials aus früheren Zeiten.

Microsoft hat hier eine sehr gute Anleitung veröffentlicht, welche Schritte durchzuführen sind, um CBA verwenden zu können. Das sind schon eine ganze Menge, aber wirklich schwer ist es nicht.

Zusammenfassung:

  • Zertifikat beantragen oder self-signed erstellen
  • App Registration in Azure AD erstellen
  • App Registration konfigurieren
    • Zertifikat hinterlegen
    • API permission hinzufügen
  • Der App die gewünschte Rolle zuweisen

Es wird empfohlen, das Zertifikat im Zertifikatsspeicher desjenigen Benutzers abzulegen, in dessen Kontext der Scheduled Task ablaufen soll. Es ist aber kein Geheimnis, dass man stattdessen auch den Zertifikatsspeicher des Computers verwenden kann. So kann prinzipiell jeder Benutzer des Computers auf das Zertifikat zugreifen, was aus Sicherheitsgründen ggf. nicht das Gelbe vom Ei ist. Immerhin: Man muss schon Administrator sein, sonst kommt eine Fehlermeldung.

Mit einem kleinen Skript wird es noch bequemer. Ich persönlich nutze das Skript auch, um interaktiv Dinge mit der EXO PS zu erledigen. Dort hinein kommen der Thumbprint des o.a. Zertifikats, die (App) ID der App Registration und der Name der Organisation.

param(
	[string]$Prefix
)
$CertThumb="BBFAB08ED27161E94A3BDA4507B32784A0B16258"
$AppId="4f5468a3-d942-4c2e-934d-d55a4e325393"
$Org="domain.onmicrosoft.com"

Connect-ExchangeOnline -CertificateThumbprint $CertThumb -AppId $AppId -Organization $Org -Prefix $Prefix

Das Skript kann man an anderen Stellen auch leicht referenzieren, sodass man nicht jedes Mal das Rad neu erfinden muss bzw. Tipp-Arbeit spart. Der Parameter -prefix ist übrigens immer dann nützlich, wenn man sowohl in Exchange onprem als auch in Exchange Online unterwegs ist. Ich persönlich verwende immer "XO" und so liefert mir z.B. "get-XOMailbox" Mailboxen in der Cloud und "get-Mailbox" die pendants onprem.

0 0 votes
Article Rating
Abonnieren
Benachrichtige mich bei
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x