Zentrale Office 365 Kontakt Synchronisation auf Exchange Online Mailboxen mit PowerShell und Office 365 Graph API

Von einem Kunden haben wir die folgende Anforderung erhalten:

  • Beim Eingang eines Telefon-Anrufs auf dem Smartphone eines Benutzers sollen die Kontakt-Details des Anrufers angezeigt werden (ohne dass der Mitarbeiter diesen Kontakt selbst pflegen muss in Outlook 😊)
  • Die Mitarbeiter haben stets eine komplette Kontakt-Liste aller «internen Mitarbeiter» aus der Exchange Online GAL auf Ihrem Mobile, respektive im Outlook Mobile Client zur VerfĂŒgung, d.h. ruft ein Mitarbeiter an, so wird der Name des Anrufers angezeigt
  • Als weitere Anforderung wurde gestellt, dass die Lösung, mit sĂ€mtlichen Schnittstellen, vom Kunden selbst betrieben werden soll. Somit fielen auch sĂ€mtliche „pfannenfertigen“ Lösungen von Drittanbietern ins Wasser.

FĂŒr den Endbenutzer steht in Office 365, respektive Exchange Online zwar eine Globale Adressliste (GAL) sowie andere zentrale Adresslisten zur VerfĂŒgung, deren Nutzung hat aber v.a. mit dem Smartphone zwei gewichtige Nachteile:

  • Die Anruferkennung auf dem Smartphone funktioniert nur auf lokal synchronisierte Kontakte jedoch nicht auf Kontakte aus der GAL
  • Der Zugriff aufs GAL funktioniert nur mit einer Internetverbindung

Aufgrund dieser LĂŒcken entstand die Anforderung, einen definierten Benutzerkreis aus Office 365 Benutzern regelmĂ€ssig in die persönlichen Kontakte der Benutzer-Mailboxen synchronisieren zu können. Wie das Bild am Anfang des Blogeintrages zeigt, geht das natĂŒrlich auch mit „normalen“ Outlook Kontakten und nicht bloss mit GAL BenutzereintrĂ€gen.

Somit kann das Script natĂŒrlich auch sonstige Outlook Kontakte, zum Beispiel aus einer zentralen Mailbox, auf die einzelnen Office 365 Mailboxen/Benutzer synchronisieren. Im erwĂ€hnten Kundenbeispiel war dies aber keine Anforderung. Andere Kunden nutzen den Synchronisationsmechanismus aber fĂŒr Ihre Kunden-/Lieferantenadressen, welche zentral gepflegt werden und so ĂŒber die Synchronisation an die Mitarbeiter verteilt werden.

Die Outlook Mobile App bietet die FunktionalitĂ€t, Kontakte aus der persönlichen Mailbox in das Adressbuch des Smartphones zu synchronisieren, und somit die Anforderung fĂŒr die Anruferkennung zu erfĂŒllen. Diese Option kann beim Outlook App unter Einstellungen -> Office 365 Account -> Synchronisation eingeschalten werden. Somit hat der Benutzer selbst die Wahl ob er dieses Feature auf seinem Smartphone nutzen will oder nicht 😉.

Als Daten-Quelle fĂŒr die Kontakte der Globalen Adressliste haben wir alle aktiven und lizenzierten Office 365 Benutzer genommen. Als Methode zur Erstellung der Kontakte innerhalb der Mailboxen wurde die Microsofts Graph API ausgewĂ€hlt. Eine Übersicht, was MS Graph ist und was es kann gibt es hier: MS Graph Concept Overview

Die MS Graph API erlaubt es, persönliche Kontakte von einzelnen Benutzern anzeigen zu lassen, zu verĂ€ndern oder zu löschen, sofern man zuvor einen entsprechenden SchlĂŒssel fĂŒr den Zugriff erhalten hat. Die MS Graph API baut auf dem Oauth 2.0 Authentifizierungs-Protokoll auf. Details dazu gibt es hier: Auth-Flow

Hinweis: Wenn du die Möglichkeiten des MS Graph APIs gerne ausprobieren möchtest, kannst du dich auf dem Graph Explorer mit deinem Office 365 Account einloggen und dich ĂŒber die vielfĂ€ltigen FunktionalitĂ€ten informieren und auch gleich ausprobieren. Es ist beispielsweise möglich, ĂŒber den Graph Explorer einen neuen Kontakt zu erstellen, welcher nach erfolgreicher Erstellung auch sofort in der persönlichen Mailbox erscheint. Hier ein Beispiel der Anzeige des eigenen Profils:

Um eine Synchronisierung von Kontaktinformationen braucht es zunĂ€chst eine publizierte Enterprise Application auf Azure im Kontext von Azure AD, mit einer eindeutigen AppID und einem Secret. Danach werden die nötigen Berechtigungen gesetzt und vererbt, damit die MS Graph API die notwendigen Aktionen, also das Erstellen und Löschen eines Kontakts, ohne manuelle Userinteraktion unternehmen kann. Hilfreich war dabei die von Microsoft zur VerfĂŒgung gestellte Dokumentation.

Als Voraussetzung fĂŒr Interaktionen mit der MS Graph API gilt es als erstes eine Authentifizierungs-Anfrage abzusetzen, um einen Authentifizierungs-Token zu erhalten. Dieser hat eine zeitlich beschrĂ€nkte GĂŒltigkeit von genau einer Stunde. Die MS Graph API nimmt Anfragen in Form von sogenannten Web-Requests entgegen. Diese mĂŒssen einer spezifischen Formatierung im JSON-Format entsprechen und sind nur mit dem erwĂ€hnten gĂŒltigen Authentifizierungs-Token möglich.

In einem nÀchsten Schritt wurde die nötige Skript-Intelligenz entwickelt, welche die aktiven Benutzer mit den relevanten Informationen (Vorname, Nachname, Telefonnummern, E-Mailadresse usw.) mit den aktuell vorhandenen Kontakten innerhalb der Benutzer-Mailboxen vergleicht und nach Bedarf entsprechend Kontakte via MS Graph API löscht oder erstellt.

Um zu verhindern, dass das Skript ungewollt persönliche Kontakte löscht, welche nicht angefasst werden sollen, wurde definiert, dass nur Kontakte mit einer vom Kunden bestimmten Outlook Kategorie von der Skript-Logik erfasst werden. Dies stellt zum einen sicher, dass ausgetretene Mitarbeiter aus der Kontaktliste gelöscht werden, neue erfasst werden, jedoch persönlich gefĂŒhrte Kontakte nicht verĂ€ndert werden.

Damit die Performance bei einer grösseren Menge Benutzer/Kontakte stimmt, wurde durch Parallelisierung beim Abgleich der persönlichen Kontakte die Synchronisierungs-Performance entsprechend erhöht, so dass auch bei der initialen Synchronisation sichergestellt ist, dass die Laufzeit unter einer Stunde bleibt (der Token ist ja initial nur 60 Minuten gĂŒltig 😉)

Damit das Debugging nicht zu kurz kommt, wurde ein Logging-Modul eingebaut, welches die VorgÀnge auf sÀmtlichen Mailboxen in einem Logfile mit Zeitstempel nachvollziehbar sammelt und speichert.

Bei regelmÀssigen Synchronisations-LÀufen ist durch die Abgleichs-Funktion sichergestellt, dass nur an der Quelle verÀnderte Objekte in den persönlichen Kontakten verÀndert werden und der Abgleich aufgrund des reduzierten Synchronisierungs-Aufwands innert Minuten oder bei weniger Mitarbeitern sogar nur in Sekunden abgeschlossen ist.

Fazit

Microsoft stellt mit der MS Graph API eine vielfĂ€ltige und sichere Schnittstelle zur VerfĂŒgung, mit enormem Potential fĂŒr viele weitere Abenteuer 😉