如何在iframe中启动有效的用户会话

时间:2014-03-24 21:51:58

标签: javascript php html iframe cross-domain

我需要设置一个主站点,将站点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的凭据将被假定为相同(如果它们不是,则可能只显示登录失败)。

到目前为止

理念列表:

  1. 我可以将登录凭据记录到主站点cookie中,并使用它来填充iframe字段。也许存储加密版本并在需要时解密?但是,将密码存储在cookie中(甚至是加密的)似乎也很荒谬。

  2. 与上述相同,但将其存储在Master Site会话变量中。

  3. 跨域cookie的想法在这里似乎没用,因为每个站点都必须设置它自己的会话cookie,一个网站不能将其设置为另一个......

    < / LI>

    我以前从未像这样处理任何跨领域的事情。因此,在我开始编写像疯子这样可能会或可能不会起作用的事情之前,我会向您寻求帮助和建议!你会怎么做到这一点?这有可能吗?

    其他问题:

    1. 由iframe中的网站1和2设置的Cookie是否表现相同?它们是否具有持久性,如果我以后不在iframe中打开同一个网站,它们会被接受吗?

    2. 如果存储凭据(cookie /会话)是唯一的方法:我如何填充iframe中的登录字段并提交表单? javascipt的?一些巧妙的GET / POST /重定向技巧?

    3. 提前致谢!

1 个答案:

答案 0 :(得分:1)

好的,结果很简单。并坚持到downvoters ......面对 - 我会在这里发布我自己的解决方案,谁知道,也许有人会发现它有用。

  1. 用户登录主站点
  2. 验证凭据
  3. 生成随机客户端令牌
  4. 使用该令牌加密密码并将加密存储在会话变量
  5. 设置Cookie并将该令牌存储在用户浏览器中
  6. 点击链接到站点1或2时的jQuery操作:

    1. 使用该令牌向服务器发送ajax请求
    2. 验证用户会话并在成功时解密存储的密码
    3. 将密码发回客户并预先填写模仿iframed网站登录表单的隐藏表单的用户名和密码字段
    4. 使用target="iframe"
    5. 提交该表单
    6. 清除那些预填表格字段
    7. Vuala,一个有效的跨域iframe自动登录...

      当然还有更多的事情,比如隐藏,取消隐藏按钮点击的div,会话超时,任何用户操作时令牌到期更新等等,但主要的是它有效!是的,密码是普通的3次发送,但无论如何这些网站都没有HTTPS。密码也不存储在普通文件中。

      <强>更新

      说得太快了。当iframe内容返回Access-Control-Allow-Origin标头时,IE和Safari存在问题。他们更强大的安全策略谨慎处理iframe内容,不允许保存会话cookie。它可以通过在IE中删除隐私设置来修复,允许在Safari中使用第三方cookie或只是检测浏览器,如果它是上述之一 - 在新的选项卡/窗口中打开它。

      否则,可以正常使用:Chrome,Firefox,Opera和Maxthon