Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在iframe中自动登录远程站点内部_Javascript_Html_Iframe_Autologin - Fatal编程技术网

Javascript 在iframe中自动登录远程站点内部

Javascript 在iframe中自动登录远程站点内部,javascript,html,iframe,autologin,Javascript,Html,Iframe,Autologin,我有一个现有的远程站点,可以通过身份验证访问,现在我想使用iframe将这个站点合并到我自己的站点中。是否有任何解决方案可以帮助在加载iframe时自动登录远程站点 <iframe src="http://remote.com/list"></iframe> 如果想要访问,需要登录,并且只有post用户名/密码有效。加载iframe时如何自动登录 这里有一些限制 登录仅适用于post方法 iframe/javascript存在跨域问题 没有提供登录API 远程站点

我有一个现有的远程站点,可以通过身份验证访问,现在我想使用iframe将这个站点合并到我自己的站点中。是否有任何解决方案可以帮助在加载iframe时自动登录远程站点

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

如果想要访问,需要登录,并且只有post用户名/密码有效。加载iframe时如何自动登录

这里有一些限制

  • 登录仅适用于post方法
  • iframe/javascript存在跨域问题
  • 没有提供登录API
  • 远程站点中不能进行其他修改

    • 这是不可能的。就这么简单。跨域限制专门用于阻止您执行类似操作。

      如果您拥有另一个站点,则可以尝试通过某种令牌进行身份验证


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

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

      <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>
      
      
      //将表单提交到iframe以登录到远程站点
      document.getElementById('login').submit();
      //登录后,更改源url(如果需要)
      var iframe=document.getElementById('frame');
      iframe.onload=函数(){
      如果(iframe.src!“http://remote.com/list") {
      iframe.src=”http://remote.com/list";
      }
      }
      

      用户名
      密码
      输入的值在客户端是可读的。

      下面是我的实现。但这并不能解决跨域问题。对于跨域问题,您可以尝试使用jQuery的方法(我还没有尝试将jQuery与此解决方案相结合)

      
      var iframeURL=http://mysite.com/path/applicationPage.aspx';
      变量iframeID='MyIFrame';
      函数loadIframe(){
      //预认证
      var req=新的XMLHttpRequest();
      req.open(“POST”,this.iframeURL,false,“username”,“password”);//使用POST安全地发送组合
      req.send(null);//这里您可以通过
      //setiFrame的SRC属性
      var iFrameWin=document.getElementById(this.iframeID);
      iFrameWin.src=this.iframeURL+“?extraParameters=true”;
      }
      //onload,调用loadIframe()函数
      loadIframe();
      
      这真的安全吗?将用户名和密码硬编码到js文件中,客户端可以下载?这是我在*.hta中加载带有身份验证的最简单、最快速的方法。我们可以使用it服务器端隐藏凭据吗。这似乎是解决此问题的最佳方法;我建议你接受这一点,我认为你是错误的,只需关闭chrome浏览器中的标志即可绕过跨域保护,告诉你存在跨域问题的不是服务器,而是浏览器!!因此,如果你自己使用它,你只需在chrome中关闭跨域提示。。easyYou可以为您关闭它,但是任何指示其用户禁用内置安全措施以使用其网站的开发人员都应该被禁止从互联网上访问。没错,但您声明这完全不可能,这是一个错误的声明。任何做出错误技术声明的人也应该被禁止上网。
      <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>