web-dev-qa-db-fra.com

connexion automatique au site distant dans iframe

J'ai un site distant existant qui a une authentification pour accéder, maintenant je veux combiner ce site dans mon propre site en utilisant iframe. Existe-t-il une solution qui peut aider à la connexion automatique au site distant lors du chargement de l'iframe?

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

Si vous souhaitez accéder à http://remote.com/list , la connexion nécessite et ne publie que le nom d'utilisateur/mot de passe fonctionne. Comment se connecter automatiquement lorsque iframe est chargé?

Voici quelques restrictions

  • la connexion ne fonctionne qu'avec la méthode post
  • iframe/javascript a un problème entre domaines
  • aucune API de connexion ne fournit
  • aucune autre modification ne peut être effectuée sur un site distant
14
linbo

Tout est possible. Cependant, la solution ci-dessous est très peu sûre en raison de la divulgation des détails d'accès à la page distante.

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

Les valeurs des entrées username et password sont lisibles côté client.

21
Jakub Hubner

Impossible. Aussi simple que cela. Les restrictions interdomaines sont en place tout spécialement pour vous empêcher de faire quelque chose comme ça.

4
PhonicUK

Voici mon implémentation pour ce faire. Cela ne résout cependant pas le problème inter-domaines. Pour le problème inter-domaines, vous pouvez essayer d'utiliser la méthode JSONP de jQuery (je n'ai pas encore essayé de combiner jQuery avec cette solution).

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

Si vous êtes propriétaire de l'autre site, vous pouvez essayer l'authentification via un jeton.

Passez un jeton autorisé à url dans l'iframe.

3
Subir Kumar Sao