6

Ich muss eine Anfrage authentifizieren, die von einem iframe (der durch Javascript erstellt wird) auf einer Seite gesendet wird. Die Authentifizierung erfolgt mit einer einfachen HTTP-Authentifizierung. Ich habe versucht,Standardauthentifizierung für eine URL in einem iframe

http://user:[email protected] 

tun, aber anscheinend ist in IE nicht verfügbar wegen einer Sicherheitsausnahme:

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

Gibt es eine andere Art, wie ich die Authentifizierung in die Anfrage aufnehmen kann, so dass der iframe wird automatisch mit dem Server authentifizieren? Vielen Dank.

Hier ist der Code, den ich zur Zeit bin mit dem nicht funktioniert:

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

} 

Antwort

4

ich genau dieses Problem lösen musste. Die einzige Lösung, die ich mir vorstellen kann, ist die Verwendung eines Reverse-Proxy. Das funktioniert so:

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

So gibt es einen Reverse-Proxy, der irgendwo getrennt vom Zielserver läuft. Details der Basisauthentifizierung werden im Reverse-Proxy gespeichert.

Sagen Sie die URL in iframe sieht wie folgt aus (die Reverse-Proxy auf Port läuft unter der Annahme 8088): Wo

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

:

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

Der Reverse-Proxy die Anforderung dann wie folgt aussehen übersetzt destination_host, PORT und Details der Standardauthentifizierung (die an den Zielserver als Anforderungsheader gesendet wird, sodass sie in der URL nicht mehr sichtbar sind) werden aus der Reverseproxykonfiguration basierend auf der 0 übernommendas war in der ursprünglichen URL.

wird der Reverse-Proxy die host Header ändern (von *.proxy_host.com zu destination_host.com), aber es wird den Weg nicht ändern, so ist der Proxy transparent auf alle Anfragen aus dem Browser CSS oder JavaScript, einschließlich aller Unteranforderungen kommenden Dateien herunterladen oder sogar für alle Anfragen, die von JavaScript initiiert wurden.

Für diese Konfiguration sind entsprechende DNS-Einträge erforderlich, sodass proxy_id.proxy_host.com in die IP des Reverseproxys aufgelöst wird und destination_host.com in die IP des Zielservers aufgelöst wird. Je nach Anforderungen kann proxy_host tatsächlich dasselbe sein wie destination_host (z. B. wenn der Proxy auf dem Zielserver ausgeführt wird).


Das war die Grundidee. In meinem Projekt können Proxy-Konfigurationen dynamisch hinzugefügt werden, so dass ich sicherstellen musste, dass alle Subdomains der Hauptdomäne *.some_host.com auf die gleiche Reverse-Proxy-IP aufgelöst werden. Ich verwende Acrylic DNS dafür als die Standard-Windows hosts Datei unterstützt keine Subdomains als * (Catch-All).

Je nach den Anforderungen Ihrer Projekte können Sie möglicherweise einen geeigneten Reverse-Proxy finden, der für diesen Zweck verwendet werden könnte. Mein Projekt ist in Erlang geschrieben und ich konnte keinen Proxy finden, den ich verwenden könnte, also habe ich meinen eigenen implementiert. Überprüfen Sie es auf GitHub: yoonka/charreada.Es hat noch keine Dokumentation, aber der Code ist ziemlich einfach. Es kann möglicherweise mit jedem Projekt verwendet werden, das in einer beliebigen Sprache geschrieben ist, aber derzeit besteht die Einschränkung darin, dass die Konfiguration mit Erlang-Aufrufen hinzugefügt wird (wie in meinem Projekt wird es von einer anderen Erlang-Anwendung geliefert). Lesen der Konfiguration von einer statischen Datei, sowie eine bessere Dokumentation, kann hinzugefügt werden, wenn es nur eine Nachfrage dafür gibt :)

Verwandte Themen