我已经在我的网站上添加了一个G+登录按钮,但我一直看到这个问题。在大多数情况下,这是第一次出现,如果您在刷新页面后尝试连接,则可以正常工作。
错误如下:
Uncaught SecurityError: Blocked a frame with origin .com"访问一个frame with origin "https://accounts.google.com"请求访问的帧具有"http"协议,被访问的帧具有"https"协议。协议必须匹配。
我看到了这篇文章Google + SignIn按钮阻塞框架,但解决方案与我无关。
首先,我想强调在处理用户凭证时确实应该使用https。如果可以,获得SSL证书并通过https提供您的内容。使用HTTPS可以防止MiTM攻击和用户信息泄露。
除此之外,有许多潜在的源触发警告:
-
如果您从提供HTTP而不是更安全的HTTPS的页面使用登录按钮,有时与登录服务器的通信会被阻止。
-
如果你授权的JavaScript源协议(http/https)不匹配,谷歌授权服务器将拒绝你的客户端(
http://yoursite.com
当你指的是https://yoursite.com
) -
如果你授权的JavaScript来源不匹配(例如,你把
.com
在授权的来源,当你的意思是yoursite.com
),那么OAuth服务器将拒绝你的帧
列出来自Google Developer Console和站点的授权来源(出于安全考虑进行了混淆)可能有助于确定您的情况。
你可以改变一些事情来看看是否有帮助:
- 尝试将cookie策略更改为
'single_host_origin'
或'http://yoursite.com'
。 - 尝试在开发人员控制台中清除授权的来源,以仅包括您的http://域。
- 尝试从隐身选项卡访问您的站点,如果此操作成功,您的浏览器cookie可能处于站点的不良状态。
- 尝试使用Chrome网络诊断来查看特定请求是否失败。
- 尝试将使用显式协议的包含替换为引用相对协议的包含(例如将
<script src="https://foo.bar/include.js" />
替换为<script src="//foo.bar/include.js" />
)