【问题标题】:Office JS ui.displayDialogAsync loses session cookies when closedOffice JS ui.displayDialogAsync 关闭时会丢失会话 cookie
【发布时间】:2018-01-23 10:51:10
【问题描述】:

我正在尝试使用 Office JS API 构建一个 Word 插件,该 API 与外部 Web 服务(在我的控制下)对话。

我正在使用 ui.displayDialogAsync 打开一个对话框,它会立即重定向到外部服务器的登录页面(重定向是为了绕过相同的域限制)。

当用户正确输入他们的登录详细信息时,服务器会返回一个会话 cookie。

不幸的是,在 Word 2016 的旧版本中,当在 Word 中关闭对话框时,所有会话 cookie 都将被遗忘,并且从插件发送到 Web 服务的任何进一步请求都将被拒绝,因为没有发送任何 cookie。

该问题在 Word 2016 的批量许可版本中出现,但在 Word 2016 的 Office 365 版本中不存在,后者似乎具有更高的版本/内部版本号。

如果我使用 Fiddler 查看请求/响应,我可以看到对话框内部发出的请求与对话框关闭后发出的请求来自不同的进程 ID。

出于安全原因(一旦用户关闭浏览器,会话需要终止),我不能使用持久性 cookie,而且持久性 cookie 似乎与 IE 共享,我们需要在 IE 中拥有独立的会话和同时Word(一些重要的状态存储在cookie中)。

有没有其他人遇到过这个/知道如何解决它。

【问题讨论】:

    标签: javascript session-cookies office-js


    【解决方案1】:

    对话框在不同的进程中运行,这是正确的。

    查看信息:https://docs.microsoft.com/en-us/office/dev/add-ins/develop/dialog-api-in-office-add-ins

    请注意: “将信息存储在主机窗口和对话框都可以访问的位置。两个窗口不共享公共会话存储,但如果它们具有相同的域(包括端口号,如果有),它们共享一个公共的本地存储。”

    所以选项一:如果满足要求,则使用本地存储。

    选项二:您可以使用一个名为 Office.context.ui.messageParent() 的函数向您的主机 (TaskPane) 发送消息,其中包含它需要存储的 sessionId,并从 TaskPane 中存储它

    【讨论】:

      【解决方案2】:

      我看到从版本 2107 build 14228.20250 开始,从 Word 桌面打开的对话框开始自动与边栏共享 cookie。我还用 Fiddler 进行了检查,现在 Word 使用相同的操作系统进程打开一个新对话框。

      【讨论】:

        猜你喜欢
        • 2015-12-07
        • 2012-02-22
        • 1970-01-01
        • 2011-04-11
        • 2020-05-02
        • 2021-08-26
        • 2023-03-28
        • 1970-01-01
        • 2016-04-06
        相关资源
        最近更新 更多