Я разработал надстройку Outlook Web, которая работает нормально. Это Taskpane, которая доступна в режиме компоновки встреч и собирает данные о событиях, добавляет несколько и отправляет все в API где-то.Доступ к Outlook RestAPI из веб-сайта Outlook
Теперь я хотел бы подписаться на аутентифицированный пользователь в API внешнего Outlook, чтобы получить уведомление о его удалении.
Абонентская вызов должен выглядеть как этот:
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"
}
Я знаю, что я должен предоставить действующий аутентификации однонаправленного токен при размещении в URL подписки, поэтому я попытался вызвать этот метод в моем Add-In:
_mailbox = Office.context.mailbox;
_mailbox.getUserIdentityTokenAsync(getUserIdentityTokenCallback);
в функции getUserIdentityTokenAsync
, я называю WebAPI контроллер, который проверяет мой маркер и отправить его обратно в Add-In:
AppIdentityToken token = (AppIdentityToken)AuthToken.Parse(rawToken);
token.Validate(new Uri(request.AudienceUrl));
return token;
Я пытался использовать этот маркер для отправки сообщений в https://outlook.office.com/api/v2.0/me/subscriptions
(с помощью почтальона), но я получил 401 сказал:
reason="The audience claim value is invalid '<MyAddInURL>'.";error_category="invalid_resource"
ли право Токен использовать в данном конкретном случае, или мне нужно, чтобы получить еще один ? Любые советы будут оценены!
- EDIT -
Как было предложено @ Benoit-патре Я попытался получить маркер, используя getCallbackTokenAsync
вместо getUserIdentityTokenAsync
, но когда я позвонил https://outlook.office.com/api/v2.0/me/subscriptions
Я получил 403:
"error": {
"code": "ErrorAccessDenied",
"message": "The api you are trying to access does not support item scoped OAuth."
}
по просьбе @ Benoit-патре вот содержание Токен:
{
"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
}
Спасибо миллион @ benoit-patra! Я буквально ищу в Интернете такую ссылку! Мне теперь стыдно :) Позвольте мне проверить это, и я вернусь к вам! – MaxSC
Хорошо, я попробовал, но, к сожалению, токен, возвращаемый 'getCallbackTokenAsync()', похоже, не дает мне прав доступа для вызова 'https://outlook.office.com/api/v2.0/ me/subscriptions', так как я получил сообщение 403: «_Api, к которому вы пытаетесь получить доступ, не поддерживает объект OAuth_» – MaxSC
@MaxSC Я думаю, что есть ошибка 'getCallbackTokenAsync', когда использование с добавлением' ReadWriteMailbox' должно обеспечивать JWT, а затем AccessToken с 'scope' больше, чем просто currentItem, который, кажется, является проблемой. Можете ли вы предоставить то, что вы видите в своем JWT (с реальными значениями, запутанными, конечно) –