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