Outlookcloudsettings
Diese Seite behandelt den Konfigurationsspeicher von Outlook in Exchange Online, der über einen REST-Endpunkt unter substrate.office.com angesprochen wird.
Diese API ist von Microsoft nicht offiziell dokumentiert.
Auslöser
Im Frühjahr 2023 hat Microsoft die neue Funktion bereitgestellt, dass Outlook 365 die Signaturen in der Cloud speichern kann. Bislang wurden diese Daten lokal als Datei abgelegt oder OWA hat diese in einer versteckten Nachricht im Postfach hinterlegt. Bei de waren nicht synchron und nun gibt es einen weiteren Speicherplatz, der aber nur mit Exchange Online und Outlook 365 genutzt wird. In dem Zuge wollte ich wissen, wo Outlook diese Daten abspeichert und habe mit Fiddler dem Protokoll auf die Finger geschaut. Dabei habe ich deutlich mehr gefunden, als nur einen Speicherplatz für Signaturen/Disclaimer.
Der Prozess "Outlook.exe" greift hier nicht auf "outlook.office.com" per EWS oder über graph.microsoft.com auf die Einstellungen zu, sondern nutzt einen Host, der bislang eher selten bekannt sein dürfte. Der Zugriff erfolgt über eine REST-API, die aber auf "substrate.office.com" geht.
Substrate?
Über den Datenspeicher "Substrate" ist auch im Jul 2023 noch recht wenig bekannt. Ist es noch ein weiterer Speicher oder nur ein anderer Zugriff auf Daten, die im Hintergrund dann doch im Postfach des Anwender oder SharePoint der Firma oder OneDrive des Anwenders liegen? Wie wird der Platz dann provisioniert und abgerechnet? eine Quelle ist z.B. Jeffrey Snover auf Microsoft Mechanics in 2019 sagte:
...
a set of storage and a set of services”, was the “heart of Office 365.” The
services are for “creating, collaborating, and communicating” and “everything
gets stored in the substrate or has a digital twin (copy) in the substrate.”
Collectively, the substrate enables Office 365 a “planetary scale people
operating system.”
Everything ist stored in the Substrate or gets a digital
twin
Quelle: Jeffrey Snover, Microsoft Technical Fellow and Architect for the
Intelligent Substrate Platform in Office 365, (https://www.youtube.com/watch?v=uuiTR8r27Os)
Ansonsten hat auch Tony Redmond schon einige Dinge beschrieben, nach denen es es einen versteckten "Files"-Ordner im Exchange Online Postfach gibt, welcher nicht gerade klein ist und solche Daten halten könnte:
Microsoft 365 internals explained |
Microsoft Graph, substrate, and PowerShell with Jeffrey
Snover
https://www.youtube.com/watch?v=uuiTR8r27Os
- Exploring the Office 365 Substrate
https://techcommunity.microsoft.com/t5/microsoft-365/exploring-the-office-365-substrate/m-p/1044294
https://petri.com/office-365-substrate - The Mysterious Files Folder and its Importance to Office 365 Apps
https://petri.com/mysterious-files-folder
API: Authentication
Wenn ich mir die Abfragen und Antworten von Fiddler ansehe, dann liegen im "substrate" schon einige Daten, die mich auch als Administrator interessieren, vor allem um diese für den Anwende z.B. einzustellen. Zuerst schaue ich auf die Authentifizierung. Hier finde ich zwei Verfahren.
Einmal die klassische "Bearer"-Authentication" aber auch eine "Password1.4"-Anmeldung für Konten, die ein Microsoft-Konto (Outlook.com) nutzen. Das Bearer-Token lässt sich wieder einfach decodieren. (gekürzt)
{ "typ": "JWT", "alg": "RS256", }.{ "aud": "https://outlook.office.com", "iss": "https://sts.windows.net/de21c301-a4ae-4292-aa09-6db710a590a6/", "app_displayname": "Microsoft Office", "appid": "d3590ed6-52b3-4102-aeff-aad2292ab01c", "name": "Carius, Frank (NAW)", "scp": "Branford-Internal.ReadWrite Calendars.ReadWrite Calendars.ReadWrite.Shared Contacts.ReadWrite Contacts.ReadWrite.Shared EAS.AccessAsUser.All EopPolicySync.AccessAsUser.All EopPsorWs.AccessAsUser.All EWS.AccessAsUser.All Files.ReadWrite.All Files.ReadWrite.Shared Group.ReadWrite.All Mail.ReadWrite Mail.ReadWrite.Shared Mail.Send Mail.Send.Shared MailboxSettings.ReadWrite MapiHttp.AccessAsUser.All MessageReaction-Internal.Update Notes.Read Notes.ReadWrite Oab.AccessAsUser.All OutlookService.AccessAsUser.All OWA.AccessAsUser.All People.Read People.ReadWrite Place.Read.All Privilege.ELT Signals.Read Signals.ReadWrite SubstrateSearch-Internal.ReadWrite Tags.ReadWrite Tasks.ReadWrite Tasks.ReadWrite.Shared Todo-Internal.ReadWrite User.ReadBasic User.ReadBasic.All user_impersonation User-Internal.ReadWrite", "upn": "user1@mxfaq.net", "ver": "1.0", "wids": [ "790c1fb9-7f7d-4f88-86a1-ef1f95c05c1b", "b79fbf4d-3ef9-4689-8143-76b194e85509" ], }.[Signature]
Interessant ist hier die lange Liste der SCP-Einträge und das "user_impersonate". Die App "Microsoft Office" ist mit der GUID "d3590ed6-52b3-4102-aeff-aad2292ab01c" angegeben
- Überprüfen von
Microsoft-Erstanbieteranwendungen in
Anmeldeberichten
https://learn.microsoft.com/de-de/troubleshoot/azure/active-directory/verify-first-party-apps-sign-in
API: Lesen
Beim Zugriff auf die API sehe ich zwei Fälle. Einmal liest der Client die Einstellungen. In der Regel sendet der Client dazu einen HTTP-Request ohne Payload.
GET https://substrate.office.com/ows/beta/outlookcloudsettings/settings/global?timestamp=638237514915454295&force=true HTTP/1.1 Connection: Keep-Alive Content-Type: application/json Accept: application/json Authorization: Bearer eyJ0e..... User-Agent: Microsoft Office/16.0 (Windows NT 10.0; Microsoft Outlook 16.0.16529; Pro) x-anchormailbox: PUID:<id>@<tenantguid> x-islargesetting: false Host: substrate.office.com
Natürlich ist eine Authentication mit Bearer drin und auch eine Anchor-Mailbox wird mitgeliefert. Das ist dann schon ein deutliches Zeichen, dass hier Exchange im Hintergrund genutzt wird, denn die Anchor-Mailbox gibt es auch bei MAPI/HTTP und EWS/HTTP. Die JSON-Antwort ist größer und ich liefere hier nur die ersten beiden Einstellungen
[ { "name": "onlinemeetings_enabledbydefault", "value": "True", "type": "Bool", "source": "SystemDefault", "scope": "user1@mxfaq.net", "parentSetting": "", "Timestamp": 638237578992034007, "itemClass": "RoamingSetting" }, { "name": "hybrid_rsvp_enabled", "value": "True", "type": "Bool", "source": "TenantDefault", "scope": "user1@mxfaq.net", "parentSetting": "", "Timestamp": 638237578992113046, "itemClass": "RoamingSetting" },
Wenn ich nur die Zeilen mit einem "name" ausgehe, dann sehen Sie schnell alle Einstellungen, die der Client auf die Anfrage hin geliefert bekommt:
Zeile 13: "name": "hybrid_rsvp_enabled", Zeile 23: "name": "UserOptionsMigrationState", Zeile 33: "name": "navigationbarwidth", Zeile 43: "name": "PackageDeliveryEventsFromEmailSystemDefault", Zeile 53: "name": "FavoritesBitFlags", Zeile 63: "name": "EventsFromEmailEnabled", Zeile 73: "name": "IsOptimizedForAccessibility", Zeile 83: "name": "ReportEventsCreatedFromEmailEnabled", Zeile 93: "name": "IsFavoritesFolderTreeCollapsed", Zeile 103: "name": "NavigationPaneViewOption", Zeile 113: "name": "LastSurveyDate", Zeile 123: "name": "IsMailRootFolderTreeCollapsed", Zeile 133: "name": "NewEnabledPonts", Zeile 143: "name": "AllowedOnlineMeetingProviders", Zeile 153: "name": "EventsFromEmailShadowMailboxChecked", Zeile 163: "name": "FavoriteFolders", Zeile 173: "name": "LearnabilityTypesShown", Zeile 183: "name": "IsFocusedInboxEnabled", Zeile 193: "name": "InferredTimeZone", Zeile 203: "name": "EventsFromEmailDelegateChecked", Zeile 213: "name": "IsGroupsTreeCollapsed", Zeile 223: "name": "FrequentlyUsedFolders", Zeile 233: "name": "WeatherLocations", Zeile 243: "name": "BuildGreenLightSurveyLastShownDate", Zeile 253: "name": "DefaultOnlineMeetingProvider", Zeile 263: "name": "MailFolderPaneExpanded", Zeile 273: "name": "NavigationBarWidthRatio", Zeile 283: "name": "ClientTypeOptInState", Zeile 293: "name": "timezone", Zeile 303: "name": "IsFocusedInboxOnLastUpdateTime",
Das sind im Jul 2023 schon 30 Einstellungen, die über Substrate geliefert werden. Die gleiche Anfrage zu einem Outlook.com-Konto ist etwas kürzer
Zeile 3: "name": "hybrid_rsvp_enabled", Zeile 7: "name": "onlinemeetings_enabledbydefault", Zeile 10: "name": "FrequentlyUsedFolders", Zeile 20: "name": "NewEnabledPonts", Zeile 30: "name": "DefaultOnlineMeetingProvider", Zeile 40: "name": "IsFocusedInboxOnLastUpdateTime", Zeile 50: "name": "timezone", Zeile 60: "name": "ClientTypeOptInState", Zeile 70: "name": "WeatherLocations", Zeile 80: "name": "FavoritesBitFlags", Zeile 90: "name": "AllowedOnlineMeetingProviders", Zeile 100: "name": "FavoriteNodes", Zeile 110: "name": "IsFavoritesFolderTreeCollapsed", Zeile 120: "name": "UserOptionsMigrationState", Zeile 130: "name": "translator_graph_migration_state", Zeile 146: "name": "microsoftedgeflight_autofill",
Die Einträge sind entweder direkt lesbar oder nur per BASE64 codiert und damit leicht decodierbar. Einige Einträge wie z.B. "FavoriteFolders" enthalten aber keine Ordnernamen sondern die GUID
API: Schreiben
Über die API kann ein Client auch Daten schreiben. Wenn ich im neuen Outlook 365 eine Outlook Signatur hinterlege, dann wird über einen "PATCH" diese neue Information in das Substrate geschrieben.
PATCH https://substrate.office.com/ows/beta/outlookcloudsettings/settings/account?fromows=true HTTP/1.1 Connection: Keep-Alive Content-Type: application/json Accept: application/json Authorization: Bearer eyJ0e.... User-Agent: Microsoft Office/16.0 (Windows NT 10.0; Microsoft Outlook 16.0.16529; Pro) x-anchormailbox: PUID:<id>@<tenantGUID> x-islargesetting: true Content-Length: 456 Host: substrate.office.com [ { "name":"Outlook Web-Signatur", "itemClass":"", "id":"", "scope":"frank.carius@netatwork.de", "parentSetting":"roaming_signature_list", "secondaryKey":"txt", "type":"Blob", "timestamp":638237579064269207,"metadata":"", "value":"Mit freundlichen Grüßen\r\nUser1\r\n", "isFirstSync":"false", "source":"UserOverride" } ]
Über diesen Weg kann ein Client Daten hinterlegen und später auf dem gleichen oder einem anderen Endgerät wieder lesen.
Mit Blick auf die Signaturen ist die Story aber eher schlechter geworden. Nur das neue "Outlook 365" speichert seine Signaturen mittlerweile in der Cloud ab, aber die On-Premises-Versionen Outlook 2022, 2019 und älter haben diese Funktion nicht. Allerdings sind diese Signaturen aktuell (Jul 2023) auch nur für Outlook 365, denn Outlook on the Web (OWA) nutzt wieder eine anderen Speicherplatz, den ein Administrator auch über die Exchange PowerShell mit "Set-MailboxMessageConfiguration " lesen und setzen kann.
- Set-MailboxMessageConfiguration
https://learn.microsoft.com/en-us/powershell/module/exchange/set-mailboxmessageconfiguration?view=exchange-ps
Noch viel Nebel
Manchmal frage ich mich schon, ob bei Microsoft die verschiedenen Teams miteinander sich abstimmen. Natürlich ist ein gemeinsame "Konfigurationsspeicher" nützlich und wenn alle Produkte diesen nutzen, kann in der Entwicklung auch Zeit gespart werden. Warum dazu aber eine neue zweite REST-API neben Graph herhalten muss, versteht wohl nur Microsoft. Zumal die Daten anscheinend auch im Exchange Postfach liegen. Die API ist sicher nicht neu, wenn schon im Jul 2023 bei mir 30 Einstellungen ausgeliefert werden. Ich hätte mir aber gewünscht, dass es zumindest in der Exchange Online PowerShell auch einen Befehle zum Lesen und Anpassen durch den Administrator gibt. Über Graph und mit AppPermissions wäre das sicher schnell möglich. Warum Microsoft hier aber einen weiteren Weg neben MAPI/HTTP und vor allem Microsoft Graph nutzt, erschließt sich mit nicht.
Weitere Links
- Disclaimer/Signatur
- Outlook Signatur
- Set-MailboxMessageConfiguration
https://learn.microsoft.com/en-us/powershell/module/exchange/set-mailboxmessageconfiguration?view=exchange-ps - Microsoft Introduces Roaming Signatures for Outlook for Windows
https://office365itpros.com/2020/05/18/roaming-signatures-outlook-windows/ - Outlook for Windows: Signature
cloud settings
https://www.microsoft.com/de-de/microsoft-365/roadmap?featureid=60371 - Get-MailboxMessageConfiguration
https://learn.microsoft.com/en-us/powershell/module/exchange/get-mailboxmessageconfiguration?view=exchange-ps - How to get email signature from OWA/Outlook 365 using EWS Managed API
https://stackoverflow.com/questions/72162624/how-to-get-email-signature-from-owa-outlook-365-using-ews-managed-api - How to Update OWA Signatures with
PowerShell
https://office365itpros.com/2020/02/20/updating-owa-signatures-powershell/ - Suchen und Verschieben von Outlook-Datendateien von einem Computer auf einen
anderen
https://support.microsoft.com/de-de/office/suchen-und-verschieben-von-outlook-datendateien-von-einem-computer-auf-einen-anderen-0996ece3-57c6-49bc-977b-0d1892e2aacc#:~:text=Die%20verschiedenen%20Dateien%2C%20aus%20denen,Benutzer%5CAnwendungsdaten%5CMicrosoft%5CSignaturen