6

Ho bisogno di autenticare una richiesta inviata da un iframe (che viene creato tramite javascript) su una pagina. L'autenticazione verrà eseguita con l'autenticazione HTTP di base. Ho provato a fareAutenticazione di base per un URL in un iframe

http://user:[email protected] 

ma a quanto pare questo non è disponibile in IE a causa di un'eccezione di sicurezza:

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

c'è un altro modo posso aggiungere l'autenticazione nella richiesta in modo che l'iframe sarà autenticarsi automaticamente con il server? Grazie.

Ecco il codice Attualmente sto usando questo non funziona:

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

} 

risposta

4

ho dovuto risolvere questo problema esatto. L'unica soluzione che potrei inventare è usare un proxy inverso. Funziona così:

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

Quindi c'è un proxy inverso che gira da qualche parte separatamente dal server di destinazione. I dettagli dell'autenticazione di base sono memorizzati nel proxy inverso.

Pronunciare l'URL nel iframe assomiglia a questo (supponendo che il proxy inverso viene eseguito sulla porta 8088):

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

Il proxy inverso poi traduce la richiesta di simile a questa:

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

Dove destination_host, PORT e i dettagli dell'autenticazione di base (inviati al server di destinazione come intestazioni di richiesta in modo che non siano più visibili nell'URL) vengono presi dalla configurazione del proxy inverso in base allo proxy_id che era nell'URL originale.

Il proxy inverso cambierà la host intestazione (da *.proxy_host.com a destination_host.com), ma non cambierà il percorso, in modo che il proxy sia trasparente a tutte le richieste provenienti dal browser, comprese eventuali sotto-richieste per poter scaricare file CSS o JavaScript , o anche a qualsiasi richiesta avviata da JavaScript.

Questa configurazione richiede le voci DNS appropriate in modo che proxy_id.proxy_host.com risolva l'IP del proxy inverso e destination_host.com risolva nell'IP del server di destinazione. A seconda dei requisiti, lo proxy_host può essere effettivamente lo stesso di destination_host (ad esempio se il proxy è in esecuzione sul server di destinazione).


Questa era l'idea di base. Nel mio progetto, le configurazioni proxy possono essere aggiunte dinamicamente, quindi dovevo assicurarmi che tutti i sottodomini del dominio principale *.some_host.com risolvano lo stesso IP del proxy inverso. Sto usando Acrylic DNS per quello come il file predefinito Windows hosts non supporta i sottodomini come * (catch-all).

A seconda dei requisiti dei progetti, è possibile trovare un proxy inverso adatto che possa essere utilizzato a tale scopo. Il mio progetto è scritto in Erlang e non sono riuscito a trovare alcun proxy che potessi usare, quindi ho implementato il mio. Controllalo su github: yoonka/charreada.Non ha ancora alcuna documentazione ma il codice è abbastanza semplice. Potrebbe essere potenzialmente utilizzato con qualsiasi progetto scritto in qualsiasi lingua, ma attualmente la limitazione è che la configurazione viene aggiunta usando le chiamate di Erlang (come nel mio progetto viene fornito da un'altra applicazione di Erlang). È possibile aggiungere la lettura della configurazione da un file statico e una documentazione migliore, se solo esiste una richiesta in tal senso :)

Problemi correlati