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
}
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
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
@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) –