我正嘗試使用Outlook REST API從用戶的Outlook郵件中獲取電子郵件。我已經能夠成功地驗證用戶,並得到用戶的訪問令牌,但是,當我試圖讓一個AJAX
調用到Outlook REST API,我得到以下錯誤:嘗試獲取用戶電子郵件時出現Outlook REST API 403錯誤
GET https://outlook.office.com/api/v2.0/me/messages?callback=jQuery31008093694845457056_1490285639120 403 (Forbidden)
而且,我獲得以下從error
錯誤的AJAX
回調函數:
Object {readyState: 4, status: 404, statusText: "error"}
這裏是我的代碼:
var ADAL = new AuthenticationContext({
instance: 'https://login.microsoftonline.com/',
tenant: 'common',
clientId: '', //Intentionally left blank here
redirectUri: 'http://localhost:8383/',
callback: userSignedIn,
popUp: true
});
function signIn() {
ADAL.login();
}
function userSignedIn(err, token) {
console.log('userSignedIn called');
if (!err) {
console.log(token); //This works!
fetchUserSentMails(token);
} else {
console.error("error: " + err);
}
}
function fetchUserSentMails(token) {
var user = ADAL.getCachedUser();
console.log(user.profile.name); //This works!
$.ajax({ //This doesn't work
type: 'GET',
crossDomain: true,
url: 'https://outlook.office.com/api/v2.0/me/messages',
dataType: 'jsonp',
headers: {'Authorization': 'Bearer ' + token},
success: function (res) {
console.log(res);
},
error: function (x, t, m) {
console.log(x);
console.log(t);
console.log(m);
}
});
}
我在做什麼錯?
我猜我得到的令牌是'id_token'而不是'access_token'來訪問Outlook郵件API..am我正確?? –
是的。我將用我認爲你錯過的一些代碼更新我的答案。 –
我添加了該代碼。但是,我收到'錯誤:「由於超時導致令牌更新操作失敗」錯誤。我搜索了這個錯誤,並在上面的代碼之前添加了'ADALContext.handleWindowCallback()',但是,這會啓動一個無限循環。我甚至嘗試從chrome開發工具的「本地存儲」中清除過期的'id_tokens',但仍然出現同樣的錯誤。我究竟做錯了什麼?? –