我有一个Outlook Web加载项,该加载项使用Office.js Dialog API打开一个对话框,该对话框导航到外部(即不在我的加载项域上)身份验证登录页面。当该页面加载到对话框中时,它会传回Set-Cookie标头,并将返回URL值设置为我的加载项中的页面,然后重定向到其他外部站点以执行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。
从测试中看,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
有人在这里想到任何解决方法,原因或解决方案吗?
我无法修改加载项之外页面的行为。
我重定向到的页面的X-Frame-Options设置为sameorigin,因此无法在对话框外部的隐藏iFrame中加载它。
此流程适用于桌面Safari,Chrome,IE,Windows Outlook客户端,Mac Outlook客户端,以前曾在2019年9月被发现可在iOS上运行,表明平台本身已发生更改。
在iOS设备上的Safari设置下,“阻止跨站点跟踪”和“阻止所有Cookie”设置均已关闭。