6

Potrzebuję uwierzytelnić żądanie wysłane z elementu iframe (tworzonego przez javascript) na stronie. Uwierzytelnienie zostanie wykonane przy użyciu podstawowego uwierzytelniania http. Próbowałem robićPodstawowe uwierzytelnianie adresu URL w iframie

http://user:[email protected] 

ale widocznie to jest niedostępne w IE, ponieważ z wyjątkiem bezpieczeństwa:

http://support.microsoft.com/kb/834489

Czy istnieje inny sposób mogę dodać uwierzytelniania na żądanie, więc będzie iframe automatycznie uwierzytelniać się z serwerem? Dzięki.

Oto kod obecnie używam, że nie działa:

var url = 'http://userName:[email protected]:12000/Service.svc/GetStatus'; 

try { 
    // Attach image to cache auth 
    var frame = $('<iframe />'); 

    frame.load(function() { 
     alert('here'); 
    }); 

    $('body').append(frame); 

    frame.attr('src', url); 
    //img.remove(); 
} 
catch (e) { 

} 

Odpowiedz

4

musiałem rozwiązać dokładnie ten problem. Jedyne rozwiązanie, jakie mogłem wymyślić, to użycie odwrotnego proxy. Działa to tak:

Browser (request without basic authentication) -> Reverse Proxy (request with added basic authentication) -> Destination server (requires basic authentication) 

Tak więc istnieje odwrotne proxy działające gdzieś oddzielnie od serwera docelowego. Szczegóły podstawowego uwierzytelnienia są przechowywane w odwrotnym proxy.

Wypowiedz URL w iframe wygląda następująco (przy założeniu, że reverse proxy działa na porcie 8088):

<iframe src="http://proxy_id.proxy_host.com:8088/cgi-bin/some/path"></iframe> 

Odwrotna proxy następnie przekłada żądanie wyglądać następująco:

http://destination_host.com:PORT/cgi-bin/some/path 

Gdzie destination_host, PORT i szczegóły podstawowego uwierzytelnienia (wysłane do serwera docelowego jako nagłówki żądań, aby nie były już widoczne w adresie URL) są pobierane z odwrotnej konfiguracji proxy na podstawie proxy_id, który był w oryginalnym adresie URL.

Odwrotna proxy będzie zmienić nagłówek host (od *.proxy_host.com do destination_host.com), ale to nie zmieni ścieżkę, więc proxy jest przezroczysty do wszelkich wniosków pochodzących z przeglądarki, w tym wszelkich cząstkowych wniosków o dopuszczenie do pobrania CSS lub JavaScript plików , a nawet do wszystkich żądań zainicjowanych z JavaScript.

Ta konfiguracja wymaga odpowiednich wpisów DNS tak, że proxy_id.proxy_host.com postanawia OD odwrotnego proxy i destination_host.com postanawia OD serwera docelowego. W zależności od wymagań proxy_host może być w rzeczywistości taki sam jak destination_host (np. Jeśli serwer proxy działa na serwerze docelowym).


To był podstawowy pomysł. W moim projekcie konfiguracja proxy może być dynamicznie dodawana, więc musiałem upewnić się, że wszystkie subdomen domeny głównej *.some_host.com rozwiązuje się z tym samym IP odwrotnego proxy. Używam do tego celu Acrylic DNS, ponieważ domyślny plik Windows hosts nie obsługuje subdomen jako * (catch-all).

W zależności od wymagań twoich projektów możesz znaleźć odpowiednie odwrotne proxy, które może być użyte do tego celu. Mój projekt został napisany w Erlangu i nie mogłem znaleźć żadnego proxy, z którego mógłbym skorzystać, więc zaimplementowałem własne. Sprawdź to na github: yoonka/charreada.Nie ma jeszcze dokumentacji, ale kod jest dość prosty. Mogłoby to potencjalnie być używane z każdym projektem napisanym w dowolnym języku, ale obecnie ograniczenie polega na tym, że konfiguracja jest dodawana za pomocą wywołań Erlang (jak w moim projekcie jest dostarczana z innej aplikacji Erlang). Czytanie konfiguracji z pliku statycznego, jak również lepszej dokumentacji, można dodać, jeśli tylko istnieje na to popyt :)

Powiązane problemy