4

Ich habe ein Outlook-Web-Add-In entwickelt, das einwandfrei funktioniert. Es ist eine Task-Pane, die im Compose-Modus von Terminen verfügbar ist und die Event-Daten sammelt, ein paar hinzufügt und diese alle an eine API sendet.Zugriff auf Outlook RestAPI über ein Outlook-Web-Add-In

Ich möchte jetzt den authentifizierten Benutzer bei der Outlook Rest API anmelden, um benachrichtigt zu werden, wenn das Ereignis gelöscht wird.

sollte das Abonnement Aufruf aussehen wie diese:

POST https://outlook.office.com/api/v2.0/me/subscriptions HTTP/1.1 
Content-Type: application/json 
{ 
    @odata.type:"#Microsoft.OutlookServices.PushSubscription", 
    Resource: "https://outlook.office.com/api/v2.0/me/events", 
    NotificationURL: "https://myNotifAPI.azurewebsites.net/api/send/myNotifyClient", 
    ChangeType: "Deleted", 
    ClientState: "blabla" 
} 

Ich weiß, dass ich eine gültige Authentifizierung Bearer Token zur Verfügung stellen muß, wenn du das Abonnement URL veröffentlichen, so meine diese Methode in Ich habe versucht, Add-In nennen:

_mailbox = Office.context.mailbox; 
_mailbox.getUserIdentityTokenAsync(getUserIdentityTokenCallback); 

In der Funktion getUserIdentityTokenAsync, nenne ich einen WebAPI Controller, der mein Token validiert und es zurück an den Add-In senden:

AppIdentityToken token = (AppIdentityToken)AuthToken.Parse(rawToken); 
token.Validate(new Uri(request.AudienceUrl)); 
return token; 

ich versuchte, dieses Token zu verwenden, um https://outlook.office.com/api/v2.0/me/subscriptions (mit Postman) zu veröffentlichen, aber ich habe ein 401 sagen:

reason="The audience claim value is invalid '<MyAddInURL>'.";error_category="invalid_resource" 

es die richtigen Token sind in diesem speziellen Fall zu verwenden, oder muß ich ein anderes zu bekommen brauche ? Irgendwelche Ratschläge würden geschätzt werden!

- EDIT -

Wie @ benoit-patra schlug ich statt getUserIdentityTokenAsync mit getCallbackTokenAsync ein Token zu bekommen versucht, aber wenn ich https://outlook.office.com/api/v2.0/me/subscriptions rief ich erhalten habe eine 403:

"error": { 
    "code": "ErrorAccessDenied", 
    "message": "The api you are trying to access does not support item scoped OAuth." 
    } 

Wie verlangt von @ benoit-patra hier ist der Token Inhalt:

{ 
    "nameid": "[email protected]xxx", 
    "ver": "Exchange.Callback.V1", 
    "appctxsender": "https://localhost:44444/[email protected]", 
    "appctx": { 
    "oid": "3a8a4f92-a010-40bd-a093-xxxxxx", 
    "puid": "10033FFF9xxxxx", 
    "smtp": "[email protected]", 
    "upn": "[email protected]", 
    "scope": "ParentItemId:AAMkADE4NTk2MDNjLTI4NGEtNDZkNS1hMzg4LTE3MzI2NGJhZWRkZQBGAAAAAAD+YYA7CnMtRZsrwJ7l6m44BwCcSer9F+cXSrWNauuHQlZ7AAAAAAENAACcSer9F+cXSrWNaxxxxxxxx" 
    }, 
    "iss": "[email protected]xx", 
    "aud": "00000002-0000-0ff1-ce00-000000000000/[email protected]", 
    "exp": 1487087672, 
    "nbf": 1487087372 
} 

Antwort

2

Sie sollten 01 verwendendies ist der JWT, dass Sie die AccessToken geben, die Sie für die Outlook-REST-API Authentifizierung helfen

https://dev.office.com/docs/add-ins/outlook/use-rest-api

Für Ihren Fall im Anschluss an die Dokumentation, ich glaube, Sie ReadWriteMailbox benötigen ausreichende Berechtigungen müssen registrieren Web-Hooks mit Outlook-REST-API.

HINWEIS: Ich habe versucht, diese auf meinem Add-in, ich die Add-In geänderte Erlaubnis ReadWriteMailbox aber das Token JWT, wenn geprüft hat mit JWT.io noch für scope:ParentId=<itemid> die ich denke, wird nicht funktionieren. Sag mir, wenn du das gleiche Problem hast.

+0

Dank eine Million @ Benoit-Patra! Ich suche im Web nach einem solchen Link! Ich fühle mich jetzt beschämt :) Lass mich das testen und ich melde mich bei dir! – MaxSC

+0

Ok, ich habe es versucht, aber das Token, das von 'getCallbackTokenAsync()' zurückgegeben wird, scheint mir nicht die richtigen Zugriffsrechte zum Aufruf von 'https://outlook.office.com/api/v2.0/ zu geben. Ich/Subskriptionen, wie ich eine 403 mit dem Sprichwort "_The API erhalten Sie Zugriff versuchen, unterstützt nicht Artikel Bereich OAuth_" – MaxSC

+0

@MaxSC Ich denke, es gibt einen Fehler der 'getCallbackTokenAsync' bei der Verwendung mit einem 'ReadWriteMailbox' Addin sollte eine bereitstellen JWT und dann AccessToken mit 'scope' für mehr als nur das currentItem, was das Problem zu sein scheint. Können Sie bieten, was Sie in Ihrem JWT sehen (mit echten Werten natürlich verschleiert) –

4

Die vorherige Antwort ist richtig, der Fehler liegt darin, dass Sie ein Token für das Element "Bereich" erhalten. Da zuvor Callback-Token nur einem Aufrufer den Aufruf von und GetItemAttachment REST-APIs ermöglicht haben. Wir nehmen Änderungen am Callback-Token vor, damit Clients REST der APIs aufrufen können. Die Voraussetzung ist, dass Sie zuerst die Berechtigung readWriteMailBox haben sollten.Zweitens erhalten eine REST-Callback-Token von isRest=true bietet, wie unter

Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result)) 

Das resultierende Token Mail.ReadWrite haben, Calendar.ReadWrite, Contacts.ReadWrite und Mail.Send Scopes.

Das sagte der isRest Parameter wird jetzt nur für Outlook Mobile Client unterstützt. Die Arbeit zur Unterstützung von OWA und Outlook läuft und wir erwarten, dass wir es bis März veröffentlichen werden.

+0

danke für die Rückmeldung. Irgendeine Problemumgehung, die Sie vielleicht daran denken, auf die Veröffentlichung der Outlook-Unterstützung zu warten? – MaxSC

+0

@MaxSC Die Arbeit wäre, die Datei office.JS aus der Dogfood-Umgebung zu laden. Diese Änderung sollte innerhalb einer Woche oder so verfügbar sein. Ich werde den Link einfügen, wenn es verfügbar ist –

+0

Großartig, lassen Sie mich wissen, sobald es zum Testen verfügbar ist! – MaxSC

Verwandte Themen