【发布时间】:2020-04-27 16:57:18
【问题描述】:
我有一个 Outlook Web 加载项,它使用 Office.js 对话框 API 打开一个对话框,该对话框导航到外部(即不在我的加载项域中)身份验证登录页面。当该页面在对话框中加载时,它会将带有返回 URL 值的 Set-Cookie 标头传回我的加载项中的页面,然后重定向到不同的外部站点以执行 SAML 身份验证(无论用户配置为他们的SAML 提供商)。登录完成后,用户将导航到身份验证登录域上的完成页面,然后该页面将读取最初设置的 cookie 并使用 cookie 中的 URL 重定向回加载项。
这在桌面平台上运行良好,但是当通过 Outlook IOS 应用程序使用加载项时,我看到 Set-Cookies 标头似乎在流程完成时不起作用页面没有 cookie。
例如(使用占位符 URL),从 https://my-addin.com/home 加载的加载项函数文件
加载项在https://my-addin.com/redirect 处启动对话框(加载项所在的域与加载项相同)。
该页面重定向到https://auth-helper.com/auth?returnUrl=https://my-addin.com/finalize。 Set-Cookie 标头从服务器传回,其值为 ReturnURL=https://my-addin.com/finalize
重定向到配置的 SAML 登录页面 https://authenticate/login,将返回 url 作为 https://auth-helper.com/auth/completion 传递给 SAML 提供程序。
-
当用户成功登录时,他们将被重定向到https://auth-helper.com/completion。 完成页面尝试从 cookie 中读取 ReturnURL 的值以导航回加载项,但 iOS 上的 cookie 中不存在 ReturnURL。
- 还可以从代理工具监控请求中看到,预期的 cookie 在应该设置后出现在对 auth-helper 的请求中。
从测试看来,当加载项域中的页面加载到对话框中时,Set-Cookie 标头适用于它们,即,如果我在打开对话框的页面上传回 Set-Cookie,然后导航到另一个页面我的加载项域 cookie 将按预期设置并且可以从第二页读取。但是对于加载项域之外的页面,它似乎无法设置 cookie 以供以后使用。
Set-Cookie: ReturnURL=https://my-addin.com/finalize;Version=1;Path=/auth;Domain=auth-helper;Max-Age=86400;HttpOnly;Secure;SameSite=None
- 返回的示例标头似乎不适用于 iOS 插件对话框。
任何人都可以在这里想到任何解决方法、原因或解决方案吗?
我无法修改加载项之外的页面行为。
我重定向到的页面将 X-Frame-Options 设置为 sameorigin,因此我无法将其加载到对话框之外的隐藏 iFrame 中。
-
此流程适用于桌面版 Safari、Chrome、IE、Windows Outlook 客户端、Mac Outlook 客户端,早在 2019 年 9 月就可以在 iOS 上运行,这表明平台本身发生了变化。
李> 在 iOS 设备上,Safari 设置下的“防止跨站点跟踪”和“阻止所有 Cookie”设置均处于关闭状态。
【问题讨论】:
-
您使用的是哪个 iOS 版本?您是否可以分享您的插件的精简版本,以便我们可以尝试在最后重现该问题?
-
Outlook 应用程序是 4.34.1。 iOS 12.4.1。我无法为此提供插件的精简版本,因为我没有任何可公开访问的外部站点供您使用,很遗憾。加载项代码应打开一个包含 Office.context.ui.displayDialogAsync 的对话框,指向一个对话框页面。然后,对话框页面应重定向到不同域上的站点,该站点传回 Set-Cookies 标头。然后转到同一个外部域上的另一个页面并尝试访问应该设置的 cookie。
标签: office-js outlook-web-addins