Office JS API在Outlook加载项

时间:2018-01-22 12:43:32

标签: oauth-2.0 office365 outlook-addin office-js

我目前正在努力解决安全问题如何将OAuth令牌从Outlook O365中的父页面安全地传递到对话框窗口。根据微软documentation,只有两种方法可以实现这一目标:

  • localStorage的
  • 查询参数

我不明白为什么微软有从对话框到父页面而不是从父页面到对话框的通信方法(*)?

* 来自documentation

dialog.addEventHandler(Office.EventType.DialogMessageReceived, processMessage); dialog.addEventHandler(Office.EventType.DialogEventReceived, processMessage);

所以我的问题是:

  • 有没有办法如何使用Office JS的内部方法将OAuth令牌从父页面传递到对话框?
  • 为什么Microsoft在父页面和对话框之间只开发了单向通信?

编辑:

我将父页面称为Outlook中的“新建会议”窗口,作为对话框,我将对话框称为iFrame(Office.context.ui.displayDialogAsync())。我已经跳过了任务窗格步骤,并在单击插件按钮时直接启动对话框。我的目的是从父页面发送OAuth(bearer)令牌(因为用户已经过验证可以访问O365邮箱)到对话框。

正如Rick所说,数据可以通过localStorage或查询参数从父对象传递到对话框。但我的问题是为什么Office JS Api缺少从父对象到对话的通信方法(当相反的方式有方法时)。

1 个答案:

答案 0 :(得分:1)

有三个actor需要保持不同:对话框,父页面(通常在任务窗格中)和Office主机应用程序(例如,Excel,Word等)。你问题的当前措辞使你难以辨别出你正在谈论的两个演员。父页面可以将包括令牌(如果需要的话)的内容传递给具有查询参数或本地存储的对话框。但通常你会使用一个对话框来获取访问令牌,并从另一个方向传递令牌,从对话框到父页面。您可以使用messageParent API执行此操作。

当您在问题中引用“主持人”时,您是在谈论父页面(可能在任务窗格中)?

修改

行。我想我现在明白了这个问题。您要求Office.JS中的API可以在父页面中调用,并将信息发送到PREVIOUSLY OPENED对话框。我们已收到请求,您可以对请求here on Office Developer User Voice进行投票。但是,我无法提供有关何时可以使用此API的时间表。与此同时,我知道从父页面到已打开的对话框进行通信的唯一方法是使用LocalStorage。搜索“如何使用本地存储在Windows之间进行通信?”你会发现有关这方面技术的信息。