我需要设置一个主站点,将站点1和站点2嵌入到iframe中,登录并启动其中的用户会话。
站点1(RoR)和站点2(未知框架)已获得自己的身份验证(用户名,密码,cookie,通常的框架安全性)。
主站点(PHP)服务器可以直接访问站点1数据库,我知道密码哈希算法,因此我可以针对站点1验证主站点的登录密码。如果站点2可以相应地更改其密码,需要,但无法访问db或框架。
遗憾的是,我无法更改站点1或站点2中的任何内容。虽然存在对站点1的完全读取访问权限,但我只能围绕它构建。
我已经勾勒出一张快速图表,以便更好地展示我的意思/需要:
a busy cat http://gettaxi.me/public_img/help.png
我需要在iframe中启动用户会话。站点1的登录凭据与主站点相同,因为它们来自同一个数据库,站点2的凭据将被假定为相同(如果它们不是,则可能只显示登录失败)。
到目前为止理念列表:
我可以将登录凭据记录到主站点cookie中,并使用它来填充iframe字段。也许存储加密版本并在需要时解密?但是,将密码存储在cookie中(甚至是加密的)似乎也很荒谬。
与上述相同,但将其存储在Master Site会话变量中。
跨域cookie的想法在这里似乎没用,因为每个站点都必须设置它自己的会话cookie,一个网站不能将其设置为另一个......
< / LI> 醇>我以前从未像这样处理任何跨领域的事情。因此,在我开始编写像疯子这样可能会或可能不会起作用的事情之前,我会向您寻求帮助和建议!你会怎么做到这一点?这有可能吗?
其他问题:
由iframe中的网站1和2设置的Cookie是否表现相同?它们是否具有持久性,如果我以后不在iframe中打开同一个网站,它们会被接受吗?
如果存储凭据(cookie /会话)是唯一的方法:我如何填充iframe中的登录字段并提交表单? javascipt的?一些巧妙的GET / POST /重定向技巧?
提前致谢!
答案 0 :(得分:1)
好的,结果很简单。并坚持到downvoters ......面对 - 我会在这里发布我自己的解决方案,谁知道,也许有人会发现它有用。
点击链接到站点1或2时的jQuery操作:
target="iframe"
Vuala,一个有效的跨域iframe自动登录...
当然还有更多的事情,比如隐藏,取消隐藏按钮点击的div,会话超时,任何用户操作时令牌到期更新等等,但主要的是它有效!是的,密码是普通的3次发送,但无论如何这些网站都没有HTTPS。密码也不存储在普通文件中。
<强>更新强>
说得太快了。当iframe内容返回Access-Control-Allow-Origin标头时,IE和Safari存在问题。他们更强大的安全策略谨慎处理iframe内容,不允许保存会话cookie。它可以通过在IE中删除隐私设置来修复,允许在Safari中使用第三方cookie或只是检测浏览器,如果它是上述之一 - 在新的选项卡/窗口中打开它。
否则,可以正常使用:Chrome,Firefox,Opera和Maxthon