Outlook JS加载项+ Outlook REST API

时间:2017-01-03 14:48:17

标签: outlook outlook-addin office-js outlook-restapi

我希望我的Outlook 365集成同时使用Outlook JS Add-In API和Outlook REST API。

但正如我所看到的,它具有单独的权限/凭证处理:

  • Outlook加载项API具有以下权限:Restricted,ReadItem,ReadWriteItem或ReadWriteMailbox
  • Outlook REST API具有完整的OAuth2支持范围,例如:我感兴趣的offline_access范围。

我不想使用Outlook加载项为用户提供额外的UI元素,并使用Outlook REST API使我的数据与Outlook数据保持同步。

是否可以在不强迫用户同意两次的情况下进行?首先,在安装加载项时同意加载项,然后同意我们的应用程序使用Outlook REST API进行同步作业。

4 个答案:

答案 0 :(得分:1)

据我所知,现在不可能要求最终用户完成第二个基于OAUTH的身份验证流程。

请注意,如果您需要访问Office.js未提供的数据,则可以在没有辅助身份验证流的情况下使用EWS(Exchange Web服务,而不是REST)

查看getUserIdentityTokenAsyncmakeEwsRequestAsync here

答案 1 :(得分:0)

您不需要第二个Auth流,您可以使用Office.context.mailbox.getCallbackTokenAsync({isRest:true},function(result)...来获取访问令牌,然后您可以使用Calendar REST例如,使用JQuery / Ajax的API。

答案 2 :(得分:0)

您可以使用Office.js,您可以从中获取令牌,令牌用于执行ajax调用。我在这里举例说明

var _mailbox = Office.context.mailbox;
_mailbox.getCallbackTokenAsync({ isRest: true }, function (result) {
    if (result.status === Office.AsyncResultStatus.Succeeded) {
       var  accessToken = result.value;

         var userDetail;
     var url = Office.context.mailbox.restUrl+ "/v2.0/me";
   try {
    $.ajax({
        type: 'GET',
        url: url,
        contentType: "application/json",
        headers: { 'Authorization': 'Bearer ' + accessToken },
        async: false,
        success: function (data) {
            userDetail = data;
        },
        error: function (textStatus, errorThrown) {

            userDetail = null;//doesnt goes here
        }

    });
}
catch (error)
{
    userDetail = null;
    writeLog(error);
}
  }
  }

以上代码提供当前用户详细信息,包括名字,电子邮件地址等等,您可以执行其他几项操作,如创建文件夹,移动电子邮件,删除电子邮件等等

答案 3 :(得分:0)

您可以使用
从Outlook JS插件中获取Outlook REST API的访问令牌。 Office.context.mailbox.getCallbackTokenAsync方法如下所示

Office.context.mailbox.getCallbackTokenAsync({isRest: true}, function(result){
  if (result.status === "succeeded") {
    var accessToken = result.value;

    // Use the access token.
    getCurrentItem(accessToken);
  } else {
    // Handle the error.
  }
});

来源:Get an access token