2012-08-09 11 views
8

Mam istniejącą zdalną witrynę, która ma uwierzytelnienie, aby uzyskać dostęp, teraz chcę połączyć tę stronę w mojej własnej witrynie za pomocą elementu iframe. Czy istnieje jakieś rozwiązanie, które może pomóc w automatycznym zalogowaniu zdalnej witryny po załadowaniu elementu iframe?Automatyczne logowanie zdalna witryna wewnętrzna w iframe

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

Jeśli chcesz uzyskać dostęp do http://remote.com/list, login i jedynie pisać prace login/hasło. Jak automatycznie logować się po załadowaniu elementu iframe?

Oto niektóre ograniczenia

  • logowania działa tylko z metody post
  • iframe/JavaScript domeny krzyż problem
  • bez logowania API zapewniają
  • żadna inna modyfikacja może zrobić w odległym miejscu

Odpowiedz

0

Nie można tego zrobić. Proste. Ograniczenia między domenami są dość specyficzne, aby powstrzymać cię przed zrobieniem czegoś takiego.

2

Jeśli jesteś właścicielem drugiej strony, możesz spróbować uwierzytelnienia za pomocą jakiegoś tokena.

Prześlij upoważniony token do adresu URL w elemencie iframe.

+0

Brak dostarczania tokena przez witrynę zdalną. – linbo

14

Wszystko jest możliwe. Jednak poniższe rozwiązanie jest bardzo niebezpieczne ze względu na ujawnienie szczegółów dostępu do strony zdalnej.

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

Wartości username i password wejść są czytelne po stronie klienta.

+0

możemy użyć tej strony serwera do ukrycia referencji. –

+0

wydaje się najlepszą odpowiedzią na problem; proponuję zaakceptować to – lwohlhart

2

Oto moje wdrożenie do tego. Nie rozwiązuje to jednak problemu między domenami. W przypadku problemu między domenami możesz spróbować użyć metody jQuery: JSONP (nie próbowałem jeszcze łączyć jQuery z tym rozwiązaniem).

<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

Czy to naprawdę bezpieczne? Posiadanie nazwy użytkownika i hasła na stałe w pliku js, który może zostać pobrany przez klienta? – codea

+0

To był najprostszy i najszybszy sposób, aby załadować