是否可以在iframe上设置Cookie?

时间:2019-02-27 03:30:26

标签: azure authentication adal

在Web应用程序的用户界面中,我们将视频加载到iframe中。该视频在Office 365 / SharePoint服务器上。

如果用户未登录由Azure ADAL管理的组织门户,则将在iframe中加载登录屏幕。如果用户已经登录,则视频可以正常播放。

到目前为止很好。但是我们的管理层不希望将iframe重定向到登录页面,而是在iframe上设置Cookie并加载视频。

我们说不可能在iframe上设置cookie并发送请求,并且我们问如何才能将Microsoft cookie放入应用程序中?架构师说有一个剩余端点,它将提供cookie的详细信息。但是我们仍然不知道如何设置它。

真的可以设置cookie并发送到Microsoft门户以避免身份验证吗?我相信这是不可能的,但是架构师和管理层坚持认为我们要尝试一些事情。

2 个答案:

答案 0 :(得分:1)

我会说不可能设置“每帧” cookie,但是我想您可以登录用户(“以某种方式”,见下文),然后重新加载帧(或在尝试加载帧之前检查身份验证) )。

静默登录的想法:

  1. 在SharePoint上创建一个帐户,该帐户仅允许观看选定的视频(又名“公共用户”)
  2. 使用此帐户自动登录所有尚未通过身份验证的用户
    1. 也许正在对SharePoint服务器进行休息呼叫,请检查用户是否已登录
    2. 如果未登录,则可能在(隐藏的)框架中将公共用户的登录数据发送到SharePoint
    3. 所有将来的请求都应设置cookie。
  3. 向他们展示视频

但是要手动设置cookie的想法是:由于安全问题,浏览器不允许您(= Web应用程序)读取或写入另一个域(= SharePoint服务器)的cookie。

答案 1 :(得分:0)

有点。 我们通过使用代理服务器完成了这样的事情。

简而言之,代理(托管在弹性 beantalk 中)会注意到一个请求进来,检查它的 cookie 为我们设置的确定用户登录的cookie,如果它发现请求中的 cookie,它会调用一些授权端点,以便能够将新的 cookie 附加到响应(set-cookie 标头)上,然后我们将使用它来确定如何继续。代理是用 node.js/express 编写的。

只要您在设置 cookie 时最终在 cookie 选项上设置了 sameSite: 'None',它就应该可以工作,即使托管 iframe 的站点位于另一个域中。

我不确定这是否与您的大局有关,但可能会给遇到类似问题的其他人一些启发。