1

我想要完成的是使用 ajax 的内联登录,它执行以下操作:

  1. 登录链接显示在不安全的 HTTP 页面上,可以说“ http://www.somedomain.com/somepage/这里没有收集登录信息

  2. 单击登录链接时,会创建一个 iframe,其中 src 指向“ https://www.somedomain.com/rest_api/values/这是登录表单首次显示的位置,通过 HTTPS

  3. 在新的 iframe 弹出窗口中,向用户展示了一个登录表单,该表单本身是通过 HTTPS 加载的安全登录表单,用户填写表单并单击继续返回给自己。

  4. 假设用户已成功登录,则会对可访问的脚本进行 jquery 调用,通过window.parent.document该脚本可使用当前用户小部件更新原始页面,然后调用要销毁的 iframe。

当我强制 iframe 使用相同的域和协议时,这很有效,但是一旦我进入 HTTP 并强制 IFRAME 使用 HTTPS 加载登录脚本,我就会得到可怕的“权限被拒绝访问属性'文档' " 成功登录后 Firebug 中的错误。

我知道Access-Control-Allow-Origin需要设置标头,因此它被动态设置为使用请求页面的任何域的 HTTPS 版本,并且我已经在原始页面请求的 Firebug 中的标头响应中验证了这一点。

那么为什么我仍然收到错误,响应标头显示:

Access-Control-Allow-Origin: https://www.somedomain.com

那么我需要设置其他东西,还是问题可能在其他地方?

谢谢你的帮助!


编辑:上面更新指出我并不愚蠢,登录表单确实是安全加载的;)

4

1 回答 1

0

除了@SLaks 上面提出的“我应该/不应该”问题之外,这是有效的,但是任何网站都需要自己权衡的问题......我面临的技术问题是这个,Access-Control-Allow-Origin 它自己还不够,还需要与以下内容一起设置:

Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: X-Requested-With

如果第一个对于我描述的确切场景是必要的,我不肯定,因为 jquery 只是在成功的 POST之后运行,而不是 POST 或 GET 调用本身,但它供您参考,因为我需要它我们网站的其他用例。

第二个...Allow-Headers是踢球者,因为包含标头X-Requested-With: XMLHttpRequest是因为它最初是使用jquery中的XMLHttpRequest调用的,特别是.ajax()

这三个都到位后,我从那以后就没有问题了。希望这可以帮助其他处于相同情况的人!


编辑:自欺欺人,HTTPS 到 HTTP 仍然不起作用,从剩下的一天我仍然试图弄清楚这一点,很明显它不会,尽管它应该这样做。

所以最终的解决方案是,通过 HTTPS 加载登录页面,通过 HTTPS 提交,并在成功登录后重定向到 HTTP 以向父级发送回调以删除登录 iframe。

于 2013-04-15T18:17:57.853 回答