重定向后如何将信息从弹出窗口发送到父窗口?

How do send information from popup to parent window after redirect?

提问人:Luk 提问时间:1/26/2023 更新时间:1/26/2023 访问量:161

问:

我有以下情况: 在网站 a 中,我有一个来自网站 b 的 iframe。 在网站 b 上,我需要使用 OAuth 工作流(例如 Google)进行身份验证,因此在网站 b 上有一个事件 window.open(google.com/auth...)。身份验证成功后,我想将身份验证令牌返回到网站 b(在 iframe 内)。

我的问题是,我不能使用 window.opener,因为弹出窗口位于另一个域上,并且在重定向后信息丢失。

我正在考虑的另一种方法是将身份验证令牌发送到我的后端,但是我如何通知网站 b 身份验证过程已完成并成功。然后从后端读取保存的身份验证令牌的安全方法是什么(我正在考虑可能通过会话 ID 或其他方式?

据我从两天的研究中发现的,在弹出窗口/新选项卡中重定向后,子项(弹出窗口)和父项(网站 b)之间没有连接。

此外,我不能直接在 iframe 中进行身份验证,因为谷歌不允许我在那里加载网站。

我知道这在某种程度上是可能的,而且我已经看到了实施这种确切工作流程的解决方案,我只是不知道如何实现。

任何帮助都是值得赞赏的!

我还尝试在父网站上收听 onunload 或 closed 事件。但是一旦网站打开,就会被解雇。

JavaScript 浏览器 事件处理 客户端

评论

0赞 Teemu 1/26/2023
您可以使用 postMessage 在窗口之间传输数据,尽管我会考虑仅在窗口和服务器之间传递身份验证/自动化信息。
0赞 Luk 1/27/2023
谢谢。如果消息被传输到服务器,那么父窗口如何知道它在那里?我需要重复轮询吗?还是有更优雅的解决方案?
0赞 Teemu 1/27/2023
你没有读过链接的 MDN 文章吗?Postmessaging 是两个窗口之间的消息传递,服务器不以任何方式参与。
0赞 Luk 1/27/2023
我已经阅读了这篇文章,我的问题是关于您答案的第二部分,当数据发送到服务器时。
0赞 Teemu 1/27/2023
在这种情况下,数据应独立于任何其他窗口。它应该不需要轮询,只需将适当的数据从服务器传递到网站 b。当然,这提供了页面 b 在您的控制之下。

答: 暂无答案