2017-01-26 3 views
1

Siehe Änderungen unten.Office 365-Kalender-API mit EWS und OAuth 2

Ich versuche mit der Office 365-API zu arbeiten, die EWS (nicht die verwaltete API) zum Erstellen/Löschen/Aktualisieren von Ereignissen in den Kalendern der Benutzer verwendet.

Bis jetzt habe ich erfolgreich Basic Auth verwendet, um zu validieren, dass meine SOAP-Anfrage funktioniert. Ich versuche jetzt, Basic Auth durch OAuth 2 zu ersetzen. Ich benötige die Verwendung des Client Credentials Flow.

Hier sind die Schritte, die ich gefolgt:

  • bereitgestellt Admin Zustimmung zur Anwendung. Ich habe die folgende URL in meinem Browser gestartet und die Einwilligung mithilfe eines Administratorkontos erteilt.

    https://login.microsoftonline.com/common/oauth2/authorize? 
        response_type=code+id_token& 
        scope=openid& 
        client_id=[Client ID]& 
        redirect_uri=http://localhost/myapp/permissions& 
        resource=https://outlook.office.com& 
        prompt=admin_consent& 
        response_mode=form_post& 
        nonce=1234 
    
  • Nach Erteilung der Genehmigung abgerufen ich die id_token aus der Antwort, und decodiert es JWT.io verwenden. Aus der Nutzlast habe ich die tid aufgenommen.

  • Next ich ein Zugriffstoken durch Senden die folgende Anforderung abgerufen:

    POST https://login.microsoftonline.com/[TID]/oauth2/token HTTP/1.1 
    cache-control: no-cache 
    Content-Type: application/x-www-form-urlencoded 
    Accept: */* 
    Host: login.microsoftonline.com 
    accept-encoding: gzip, deflate 
    Connection: close 
    
    client_id=[CLIENT ID]& 
    client_secret=[CLIENT SECRET]& 
    grant_type=client_credentials& 
    resource=https%3A%2F%2Foutlook.office.com 
    
  • das Zugriffstoken verwenden, schickte ich den gleichen Wunsch, wie ich Grund Auth tat, mit der Ausnahme ich den Grund Auth-Header ersetzt mit Authorization: Bearer [Access Token]

erhielt ich folgende Fehler (403 Forbidden): The token contains not enough scope to make this call.

Was muss ich tun, um diesen Fehler zu beheben?

Edit 1: Ich habe die Use Exchange Web Services with full access to all mailboxes Anwendung Erlaubnis und das Senden der SOAP-Nachricht führt nun zu einer 500 Internal Server Error ...

Antwort

0

Die Lösung mit der folgenden beteiligt: ​​

  1. Hinzufügen der Use Exchange Web Services with full access to all mailboxes Anwendung Berechtigung, da EWS die Verwendung von detaillierteren Berechtigungen nicht erlaubt.

  2. Hinzufügen eines ExchangeImpersonation SOAP header für das Zielpostfach.

  3. Einstellung des HTTP-Headers X-AnchorMailbox.