Office365 使用Outlook加载项令牌获取带有EWS Java API的当前项目服务器端
我正在构建Outlook加载项,并尝试使用登录令牌使用EWS Java API“下载”当前选定的项目(=邮件消息)。下一步是获取附件并在系统服务器端处理它们 下面是使用Office365 使用Outlook加载项令牌获取带有EWS Java API的当前项目服务器端,office365,outlook-addin,office365api,office-addins,Office365,Outlook Addin,Office365api,Office Addins,我正在构建Outlook加载项,并尝试使用登录令牌使用EWS Java API“下载”当前选定的项目(=邮件消息)。下一步是获取附件并在系统服务器端处理它们 下面是使用mailbox.getCallbackTokenAsync方法检索登录令牌的步骤。 我将此令牌发布到我们的服务器(也为外接程序提供服务),并使用EWS Java Api获取当前选定的项 但我无法使用令牌登录。我在服务器端收到的异常是远程服务器返回了一个错误:(401)未经授权 在外接程序令牌中,我使用以下javascript代码调
mailbox.getCallbackTokenAsync
方法检索登录令牌的步骤。
我将此令牌发布到我们的服务器(也为外接程序提供服务),并使用EWS Java Api获取当前选定的项
但我无法使用令牌登录。我在服务器端收到的异常是远程服务器返回了一个错误:(401)未经授权
在外接程序令牌中,我使用以下javascript代码调用我们的服务:
(function(){
'use strict';
// The Office initialize function must be run each time a new page is loaded
Office.initialize = function(reason){
jQuery(document).ready(function(){
getAccessToken();
});
};
// Retrieves an acccess token
function getAccessToken(){
Office.context.mailbox.getCallbackTokenAsync(exchangeTokenCallback);
}
function exchangeTokenCallback(asyncResult, userContext) {
if (asyncResult.status === "succeeded") {
// get info about selected mail message...
var item = Office.cast.item.toItemRead(Office.context.mailbox.item);
var email = Office.context.mailbox.userProfile.emailAddress;
var loginToken = asyncResult.value;
$.ajax({
headers: {"X-Outlook-Token-For-EWS":loginToken,
"X-Outlook-EwsUrl":Office.context.mailbox.ewsUrl,
"X-Outlook-ItemId": item.itemId
},
url: "/ac/api/email/ews"
}).done(function(result) {
jQuery('#result').text(JSON.stringify(result));
}).error(function(result) {
jQuery('#result').text(JSON.stringify(result));
});
} else {
showToast("Error", "Could not get callback token: " + asyncResult.error.message);
}
};
})();
服务使用这个Java代码来获取项目(params
对象包含我在上面javascript的标题中发布的信息):
我希望有更多经验的人能为我指明正确的方向。我在ews java api中找到了一个正确的方向。我错误地使用了“TokenCredentials”,因为它不支持OAuth登录。ews java api完全支持使用OAuth令牌登录。幸运的是,我们可以在请求中传递http头,因此这对我很有用:
service.getHttpHeaders().put("Authorization", "Bearer " + params.getAccessToken());
除此之外,我不再需要使用setCredentials
方法设置凭据
service.getHttpHeaders().put("Authorization", "Bearer " + params.getAccessToken());