T2T Free/Busy
Wenn zwei Firmen mit Exchange Online enger zusammenarbeiten wollen, dann können die beiden Tenant Administratoren versuchen eine bessere "Zusammenarbeit" zu erreichen, z.B. indem Benutzer im anderen Tenant als Gast angelegt oder per B2B Direct Connect eingerichtet werden. Auch Empfänger der anderen Organisation können in Exchange als Kontakte angelegt werden.
Umgebung
Ich habe für meine Tests und Analysen wieder zwei Tenants genutzt. Als anfragendes Postfach habe ich einfach mein alltägliches Postfach bei Net at Work genutzt. So konnte ich einfach per Outlook und Fiddler die Anfragen auf meinem PC nachtracken. Die Gegenstelle ist ein Cloud-Postfach aus meinem Tenant UCLABOR.DE. Bislang war noch keine Partnerschaft, Kontakte o.ä. eingerichtet.
Diese Beschreibung gilt für zwei Exchange Online Umgebungen. Für einen Koexistenz-Mode mit Hybrid gelten einige andere Voraussetzungen. Siehe dazu auch Free/Busy mit OAUTH und Hybrid FreeBusy
Für die Analyse auf dem Client habe ich Fiddler als HTTP-Proxy mit SSL-Decryption eingesetzt. Die Frei/Belegt-Abfrage von Outlook ist eine klassische EWS-Abfrage gegen den Exchange Online-Server, auf dem das Postfach liegt. Outlook protokolliert normalerweise leider solche fehlerhaften Abfragen nicht im Eventlog oder einer lokalen Datei. Ich könnte aber einen Trace-Mode aktivieren, bei dem Outlook dann Dateien in "%temp%\OlkAS\Datum-Urhzeit-AS.LOG" an.
- Aktivieren der globalen und erweiterten
Protokollierung für Microsoft Outlook
https://support.microsoft.com/de-de/topic/aktivieren-der-globalen-und-erweiterten-protokollierung-f%C3%BCr-microsoft-outlook-15c74560-2aaa-befd-c256-7c8823b1aefa
Unvorbereitet
Zuerst habe ich einfach aus meinem Postfach versucht die Frei/Belegt-Zeiten zu ermitteln. Das hat natürlich nicht funktioniert. Interessant ist hier aber schon die Fehlermeldung
Ein Mitschnitt mit Fiddler auf dem Outlook Client zeigt die HTTP-Anfrage meines Outlooks an /EWS meines Postfachservers, der in der Cloud liegt:
Interessanter ist hier die XML-Payload und Antwort, die zum einen die Anfrage nach den Frei/Belegt-Zeiten des Zielbenutzers definiert und die Antwort des Exchange Servers liefert:
Eigenes Tracing
Sie haben hier sicher gesehen, dass die Bilder von Fiddler sind. Oft ist es aber nicht möglich, dass Sie Fiddler nutzen. Dann können sie das Outlook Tracking aktivieren.
- How to enable global and advanced
logging for Microsoft Outlook
https://support.microsoft.com/en-us/topic/how-to-enable-global-and-advanced-logging-for-microsoft-outlook-15c74560-2aaa-befd-c256-7c8823b1aefa
Leider landen die Daten in ETL-Dateien, die sie zur Analyse zu Microsoft senden müssten. Sie können aber mit einem Texteditor durchaus darin nach Texten suchen und vielleicht finden Sie die EWS-Anfrage und den EWS-Fehler, wenn Sie nach "EWS" suchen:
Einfacher ist aus meiner Sicht hier aber die Analyse mit Outlook Web App im Browser und umgehen eventuelles Caching durch OST-Dateien. Starten Sie OWA und legen sie im Kalender einen neuen Termin an. Ehe Sie nun einen Teilnehmer einladen, starten Sie mit F12 den Chromium Debugger und gehen auf den Reiter "Netzwerk". Aktivieren Sie dort die Einstellung "Protokoll beibehalten" und addieren Sie dann in OWA den fraglichen Benutzer. Über die Suche finden Sie dann schnell einen Request an "service.svc":
Die Fehlermeldung ist im Bild natürlich abgeschnitten aber sollte ihnen bei der Lösung helfen.
Fehlerbilder
Folgende verschiedene Fehlermeldungen habe ich versucht zu provozieren.
- Kein Organisation Relationship
Wenn ich im anfragenden Tenant keinen passenden Eintrag habe, dann scheint Exchange aber nach einem Kontakt zu suchen. Den Fehler bekommen Sie weg, wenn Sie auf ihrer Seite die Domain im Rahmen einer "Organization Relationship einrichten"
Microsoft.Exchange.InfoWorker.Common.Availability.MailRecipientNotFoundException: Unable to resolve e-mail address user2@msxfaqlab.onmicrosoft.com to an Active Directory object. . Name of the server where exception originated: PA4PR04MB9344. LID: 35938
- Lokaler Kontakt eingerichtet
Wenn ich kein Organization Relationship eingerichtet habe aber einen AD-Kontakt pflege, dann ist das für Exchange Online auch die Erlaubnis die Anfrage zu stellen. Wenn die Gegenseite natürlich nicht mitspielt, dann bekomme ich folgenden Fehler.
Autodiscover failed for email address user1@uclabor.de with error Microsoft.Exchange.InfoWorker.Common.Availability.AutoDiscoverInvalidUserException: The response from the Autodiscover service at 'https://autodiscover-s.outlook.com/autodiscover/autodiscover.svc/WSSecurity' failed due to an error in user setting 'ExternalEwsUrl'. Error message: InvalidUser. . Name of the server where exception originated: PA4PR04MB9344. LID: 33676., inner exception: The response from the Autodiscover service at 'https://autodiscover-s.outlook.com/autodiscover/autodiscover.svc/WSSecurity' failed due to an error in user setting 'ExternalEwsUrl'. Error message: InvalidUser. LID: 33676
- Einseitiges Organization Relationship
eingerichtet
Die anfragende Organisation ist für die Gegenseite freigeschaltet aber die Gegenseite erlaubt keine Anfrage
Autodiscover failed for email address user1@uclabor.de with error Microsoft.Exchange.InfoWorker.Common.Availability.AutoDiscoverInvalidUserException: The response from the Autodiscover service at 'https://autodiscover-s.outlook.com/autodiscover/autodiscover.svc/WSSecurity' failed due to an error in user setting 'ExternalEwsUrl'. Error message: InvalidUser. . Name of the server where exception originated: PA4PR04MB9344. LID: 33676., inner exception: The response from the Autodiscover service at 'https://autodiscover-s.outlook.com/autodiscover/autodiscover.svc/WSSecurity' failed due to an error in user setting 'ExternalEwsUrl'. Error message: InvalidUser. LID: 33676
- Fehler im Zielsystem
Ich habe auch eine Domain eingerichtet, die aber auf einen On-Premises-Server verweist, der aber nicht funktioniert.
<S:Fault xmlns:S="http://www.w3.org/2003/05/soap-envelope"> <S:Code><S:Value>S:Sender</S:Value><S:Subcode><S:Value>wst:FailedAuthentication</S:Value> </S:Subcode></S:Code><S:Reason> <S:Text xml:lang="en-US">Authentication Failure </S:Text></S:Reason><S:Detail><psf:error xmlns:psf="http://schemas.microsoft.com/Passport/SoapServices/SOAPFault"> <psf:value>0x80048800</psf:value><psf:internalerror><psf:code>0x80048800</psf:code> <psf:text>AADSTS901124: Application 'fydibohf25spdlt.carius.de' does not exist.</psf:text> </psf:internalerror></psf:error></S:Detail></S:Fault> Microsoft.Exchange.Net.WSTrust.SoapFaultException: Soap fault exception received. at Microsoft.Exchange.Net.WSTrust.SoapClient.EndInvoke(IAsyncResult asyncResult) at Microsoft.Exchange.Net.WSTrust.SecurityTokenService.EndIssueToken(IAsyncResult asyncResult) at Microsoft.Exchange.InfoWorker.Common.Availability.ExternalAuthenticationRequest.Complete(IAsyncResult asyncResult)
Microsoft pflegt dazu sogar eine PDF-Datei:
FB_Errors.FixesV6.pdf
https://techcommunity.microsoft.com/legacyfs/online/media/2019/01/FB_Errors.FixesV6.pdf
Wenn Sie weitere Fehler haben, dann freue ich mich über ein Feedback mit der Fehlermeldung und vielleicht dem Hinweise.
Organization Relationship
Wie sie oben ja gesehen haben, entscheidet jede Firma selbst, welche Informationen sie an welche Partner frei geben. In unserem Bild haben wir nun die anfragende und die angefragte Organisation.
- Anfragende Organisation
Wenn ich meinen Benutzer erlauben möchte, dass Sie Frei/Belegt-Zeiten von anderen Firmen abfragen, dann muss ich ein "Organization Relationship" oder entsprechende Org-Kontakte anlegen. - Angefragte Organisation
Die Gegenseite muss mir das natürlich erlauben. Der Administrator der Gegenseite sollte hier seine "Sharing Policy" kontrollieren oder ebenfalls eine "Organization Relationship" einrichten.
Wenn Sie eine Organization Relationship
eingerichtet haben, können Sie keine SharingPolicy für diese
Domains anlegen:
Es ist daher gelebte Praxis, dass zwei "befreundete" Firmen sich Gegenseitig als "Organization Relationship" eintragen. Hier am Beispiel einer Seite:
Über den gleichen Weg kann ich natürlich steuern, was ich meinerseits für die andere Firma freigebe. Ich muss hier nur eine Domain der Gegenseite angeben. Über die Autodiscover-Funktion findet Exchange schon alle anderen Domains heraus. Schauen Sie sich dazu einfach den neuen Eintrag nach dem Speichern noch einmal an.
Die Application URL und der Autodiscover-Endpunkt verweist hier auf die Cloud mit folgenden Werten:
Application URL: outlook.com Autodiscover Endpoint: https://autodiscover-s.outlook.com/autodiscover/autodiscover.svc/WSSecurity
Das gilt natürlich nur, wenn die Domain zu 100% in der Cloud ist. Wenn die Zielumgebung im Exchange Hybrid Mode arbeitet, dann sehen die Werte natürlich anders aus, z.B.
Application URL: FYDIBOHF25SPDLT.netatwork.de Autodiscover Endpoint: https://autodiscover.netatwork.de/autodiscover/autodiscover.svc/WSSecurity
Das bedeutet dann aber, dass sie nicht die Free/Busy-Zeit einer Exchange Online Mailbox der anderen Seite über diesen Weg finden. Auf der Seite Hybrid FreeBusy habe ich beschrieben, dass Sie in dem Fall die "<tenantname>.mail.onmicrosoft.com"-Domain über eine "Organization Relationship" einrichten und den Anwendern sagen, dass die diese doch untypische Adresse verwenden sollen. Besser ist hier dann natürlich die Anlage eines MailContacts beim Benutzer oder in Exchange Online, damit der Anwender den Benutzer in der anderen Organisation elegant und korrekt auswählen kann.
Mir ist im Moment kein besserer Weg bekannt und leider unterstützt der Free/Busy-Lookup keinen Redirect des lokalen Exchange Servers in die Cloud in einer Hybrid-Bereitstellung.
Das bedeutet aber auch, dass diese Einträge "statisch" sind, d.h. wenn die andere Firma weitere Domains in ihrem System eintragen und die Frei/Belegt-Zeiten dazu ebenfalls erreichbar sein sollen, müssen die Partnerfirmen die Domainliste aktualisieren.
- Organization relationships in Exchange
Online
https://docs.microsoft.com/en-us/exchange/sharing/organization-relationships/organization-relationships - Create an organization relationship in
Exchange Online
https://docs.microsoft.com/en-us/exchange/sharing/organization-relationships/create-an-organization-relationship
Ergebnis
Erwarten Sie nicht, dass die Änderungen "sofort" aktiv werden. Exchange Online besteht aus sehr vielen Exchange Servern und einige Informationen werden von den Servern im Cache gehalten. Über Fiddler habe ich gesehen, dass Outlook zumindest keinen Cache hat, sondern jedes Mal per EWS neu anfragt.
Nachdem auf beiden Seiten die "Organization Relationship" korrekt eingetragen wurde, konnte ich auch problemlos die Frei/Belegt-Zeiten erhalten und anzeigen.
Weitere Links
- Kalender Federation mit Exchange und Outlook
- Frei/Belegt-Zeiten
- Hybrid FreeBusy
- Exchange OAuth
- Free/Busy mit OAUTH
- Fiddler
- Dreimal 401 mit Negotiate
- Outlook Client Logging
- Exchange Partner Application
-
Demystifying Hybrid Free/Busy: Finding errors and
troubleshooting
https://techcommunity.microsoft.com/t5/exchange-team-blog/demystifying-hybrid-free-busy-finding-errors-and-troubleshooting/ba-p/607727 -
Behandeln von Frei/Gebucht-Problemen in Exchange Hybridumgebung
https://docs.microsoft.com/de-de/exchange/troubleshoot/calendars/troubleshoot-freebusy-issues-in-exchange-hybrid -
Create an organization relationship in Exchange Online
https://docs.microsoft.com/en-us/exchange/sharing/organization-relationships/create-an-organization-relationship -
Handling Autodiscover error messages
https://learn.microsoft.com/en-us/exchange/client-developer/exchange-web-services/handling-autodiscover-error-messages -
Microsoft 365 inter-tenant collaboration
https://learn.microsoft.com/en-us/microsoft-365/enterprise/microsoft-365-inter-tenant-collaboration?view=o365-worldwide -
Users from a federated organization cannot see the free/busy
information of anotherExchange organization
https://support.microsoft.com/en-us/topic/users-from-a-federated-organization-cannot-see-the-free-busy-information-of-anotherexchange-organization-938f0ba7-1303-de00-57a0-6ff73ccceece -
Aktivieren der globalen und erweiterten Protokollierung für
Microsoft Outlook
https://support.microsoft.com/de-de/topic/aktivieren-der-globalen-und-erweiterten-protokollierung-f%C3%BCr-microsoft-outlook-15c74560-2aaa-befd-c256-7c8823b1aefa -
Calendar Sharing Between Exchange Online Tenants
https://seanmcavinue.net/2021/11/08/calendar-sharing-between-exchange-online-tenants/ -
How Does Free/Busy Works between two different office 365
Tenants and Configure
https://windowstechpro.com/how-does-free-busy-works-between-two-different-office-365-tenants-and-configure -
Exchange federated calendar sharing issue
https://www.inthecloud247.com/exchange-federated-calendar-sharing-issue/