2012-08-09 92 views
8

我有一个现有的远程站点,其中有身份验证访问,现在我想结合本站在我自己的网站使用iframe。加载iframe时是否有任何解决方案可以帮助自动登录远程站点?在iframe中自动登录远程站点内

<iframe src="http://remote.com/list"></iframe> 

如果想访问http://remote.com/list,登录需要和POST用户名/密码的作品。如何在iframe加载时自动登录?

这里有一些限制

  • 登录只能用POST方法的工作原理
  • 的iframe/JavaScript有跨域问题
  • 没有登录API提供
  • 没有其他的修饰可以在远程站点做

回答

0

无法完成。就那么简单。跨域限制是非常具体的,以阻止你能够做到这样的事情。

2

如果您拥有其他网站,那么您可以尝试通过某个令牌进行身份验证。

将授权令牌传递给iframe中的网址。

+0

没有令牌由远程站点提供。 – linbo 2012-08-09 11:09:18

14

一切皆有可能。但是,由于披露了访问远程页面的详细信息,下面的解决方案非常不安全。

<form id="login" target="frame" method="post" action="http://remote.com/login"> 
    <input type="hidden" name="username" value="login" /> 
    <input type="hidden" name="password" value="pass" /> 
</form> 

<iframe id="frame" name="frame"></iframe> 

<script type="text/javascript"> 
    // submit the form into iframe for login into remote site 
    document.getElementById('login').submit(); 

    // once you're logged in, change the source url (if needed) 
    var iframe = document.getElementById('frame'); 
    iframe.onload = function() { 
     if (iframe.src != "http://remote.com/list") { 
      iframe.src = "http://remote.com/list"; 
     } 
    } 
</script> 

usernamepassword输入的值是在客户端读取。

+0

我们可以在服务器端使用它来隐藏证书。 – 2017-01-30 09:00:22

+0

似乎是问题的最佳答案;我建议你接受这个 – lwohlhart 2017-08-17 16:09:51

2

这是我的实现这样做。尽管如此,这并不能解决跨域问题。对于跨域问题,您可以尝试使用jQuery的JSONP方法(我还没有尝试将jQuery与此解决方案结合起来)。

<iframe id="MyIFrame" width="400" height="400"></iframe> 
<script type="text/javascript"> 
    var iframeURL = 'http://mysite.com/path/applicationPage.aspx'; 
    var iframeID = 'MyIFrame'; 

    function loadIframe(){ 
     //pre-authenticate 
     var req = new XMLHttpRequest(); 
     req.open("POST",this.iframeURL, false, "username", "password"); //use POST to safely send combination 
     req.send(null); //here you can pass extra parameters through 

     //setiFrame's SRC attribute 
     var iFrameWin = document.getElementById(this.iframeID); 
     iFrameWin.src = this.iframeURL + "?extraParameters=true"; 
    } 

    //onload, call loadIframe() function 
    loadIframe(); 
</script> 
+0

这真的很安全吗?将用户名和密码硬编码到客户端可以下载的js文件中? – codea 2016-06-28 07:59:45

+0

这是我以* .hta加载身份验证的