我開發了一個工作正常的Outlook Web插件。這是一個Taskpane,可以在約會模式下使用,收集事件數據,添加一些數據並將其全部發送到某個API。從Outlook Web插件訪問Outlook RestAPI
現在我想要做的是將已驗證的用戶訂閱到Outlook Rest API,以便在事件被刪除時得到通知。
認購調用看起來應該像這樣的:
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所以我試圖調用此方法在我的加載項:
_mailbox = Office.context.mailbox;
_mailbox.getUserIdentityTokenAsync(getUserIdentityTokenCallback);
在功能getUserIdentityTokenAsync
,我稱之爲的WebAPI控制器,驗證我的令牌,併發送回外接:
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"
它是在特定的情況下,使用權令牌或做我需要得到一個又一個?任何建議,將不勝感激!
- 編輯 -
至於建議由@伯努瓦 - 帕特雷我試圖讓使用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."
}
按照要求通過@伯努瓦 - 帕特雷這裏的令牌內容:
{
"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/我/訂閱',因爲我確實收到403說「_您試圖訪問的api不支持項範圍OAuth_」 – MaxSC
@MaxSC我認爲有'getCallbackTokenAsync'時使用'ReadWriteMailbox'插件的錯誤應該提供一個JWT,然後用'scope'的AccessToken不僅僅是currentItem,這似乎是問題所在。你能提供你在JWT中看到的東西嗎(當然真正的值被混淆了) –