javascript – 在最新版本的Chrome中通过Google OAuth2登录时的原始政策问题
作者:互联网
在我的网站上,我们创建了一个弹出窗口,该窗口被重定向到Google授权,在指定登录后RedirectUri返回到我的站点.在主窗口中,我们检查弹出窗口的状态以确定用户是否已经登录,以便我们可以关闭此弹出窗口.
通常,一旦用户登录并且弹出窗口已重定向回我的站点,我们就可以访问主窗口中的弹出窗口.但是,从最新版本的Chrome(v.63.0.3239.132)开始,我们会收到以下错误:
DOMException: Blocked a frame with origin "..." from accessing a cross-origin frame.
这似乎与this Chrome bug有关,但是我们没有从iframe调用window.open(它从主站点调用). 63.0.3239.132也应该为这个问题引入一个修复程序.
我并不总是重复这个问题:如果用户已经登录了他们的Google帐户,一旦弹出窗口被重定向回我的网站,主窗口就可以访问弹出窗口.此外,在初始重定向到Google授权(到帐户选择页面)后,我可以将弹出窗口导航回我的网站,此时主窗口将再次访问弹出窗口.
此问题也不会在早期版本的Chrome和其他浏览器中重现.
解决方法:
我无法解决你的问题,但我可以建议另一种方法来解决你正在做的事情.
而不是直接从主页面或弹出窗口(window.opener)中的主页面访问弹出窗口,您是否考虑过使用浏览器的sessionStorage在这些页面之间进行通信(这些页面都是从您的应用程序提供的)?
您的页面/窗口将共享sessionStorage,因此一个或两个可以挂钩到window.onstorage事件以监视另一个所做的更改.
https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onstorage
我意识到这需要一些重新开发,因此并不是你问题的严格答案,但我希望它仍然是一个有用的建议.
标签:javascript,google-chrome,google-oauth,google-oauth2 来源: https://codeday.me/bug/20190705/1389478.html