【问题标题】:Outlook JS Add-In + Outlook REST APIOutlook JS 插件 + Outlook REST API
【发布时间】:2017-01-03 14:48:16
【问题描述】:

我希望我的 Outlook 365 集成同时使用 Outlook JS 插件 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 进行同步作业的应用程序。

【问题讨论】:

  • 在这里你可以找到答案:Use the Outlook REST APIs from an Outlook add-in
  • 看起来我无法使用此功能,因为当用户不使用加载项(处理推送通知)时,我需要一个刷新令牌来代表用户执行操作。这种方法只给了我一个生命周期有限的访问令牌。

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


【解决方案1】:

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

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

看看getUserIdentityTokenAsyncmakeEwsRequestAsynchere

【讨论】:

  • 谢谢,我知道 office.js API 中的 EWS 方法,但是我需要的是在他不使用加载项时访问用户日历的可能性,做一些同步工作。所以看起来像第二个 OAuth 来保持刷新/访问令牌是要走的路。
  • 是的,这让我确信我必须进行第二次身份验证流程,来自 Outlook 加载项的 EWS 调用对于我的需求来说太有限了。谢谢!
【解决方案2】:

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

【讨论】:

  • 格式化您的问题,使其更清晰。
  • 但是我可以将令牌存储在后端并从那里使用它吗?如果访问令牌过期,我还会获得刷新令牌吗?我可以从 REST API 进行所有调用吗?订阅推送通知?
【解决方案3】:

你可以使用 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);
}
  }
  }

上面的代码给出了当前用户的详细信息,包括名字、电子邮件地址等等,您可以执行其他一些操作,例如创建文件夹、移动电子邮件、删除电子邮件等等

【讨论】:

    【解决方案4】:

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多