2012-08-09 45 views
8

Tengo un sitio remoto existente que tiene Autenticación para acceder, ahora quiero combinar este sitio en mi propio sitio usando iframe. ¿Hay alguna solución que pueda ayudar a iniciar sesión automáticamente en el sitio remoto cuando cargue el iframe?auto login sitio remoto interno en iframe

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

Si desea acceder a http://remote.com/list, inicio de sesión y sólo requiere enviar las obras nombre de usuario/contraseña. ¿Cómo iniciar sesión automáticamente cuando se cargó iframe?

Estas son algunas de restricción

  • inicio de sesión sólo trabaja con método post
  • iframe/Javascript dominios tema
  • ninguna API de inicio de sesión proporcionar
  • ninguna otra modificación se puede hacer en un sitio remoto

Respuesta

0

No se puede hacer. Simple como eso. Las restricciones de dominio cruzado están establecidas específicamente para evitar que pueda hacer algo como eso.

2

Si posee el otro sitio, puede intentar la autenticación a través de algún token.

Pase un token autorizado a url en el iframe.

+0

no token proporciona por sitio remoto. – linbo

14

Todo es posible. Sin embargo, la solución a continuación es muy insegura debido a la divulgación de los detalles de acceso a la página remota.

<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> 

Los valores de username y password entradas se pueden leer en el lado del cliente.

+0

podemos usarlo del lado del servidor para ocultar la credencial. –

+0

parece ser la mejor respuesta para el problema; sugiero que aceptes esto – lwohlhart

2

Aquí está mi implementación para hacer esto. Sin embargo, esto no resuelve el problema de dominios cruzados. Para el problema de dominios cruzados, puedes intentar usar el método JSONP de jQuery (todavía no he intentado combinar jQuery con esta solución).

<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

¿Es esto realmente seguro? ¿Tiene el nombre de usuario y la contraseña codificados en el archivo js que puede descargar el cliente? – codea

+0

Esta fue la forma más fácil y rápida de cargar un