Ho postato questa domanda su DBA, ma è stata chiusa e non è mai stata riaperta nemmeno dopo che ho riscritto l'intera faccenda per essere più specifico. Penso che sia più appropriato per i programmatori comunque:)
Informazioni di base
Ho un server CouchDB (Server B) a cui si accede da un altro server che esegue PHP (Server A). La mia app Web (Javascript sul lato client) effettua una richiesta per un file sul server A. Il server A invia richieste al server B con le credenziali di accesso (nome utente: password). Il server B restituisce oggetti JSON che corrispondono a file corrispondenti, quindi il server A restituisce tali dati al client. La risposta include alcuni metadati relativi al file e un URL al file sul Server B. I dati del file stesso non sono inclusi nella risposta.
Il problema
L'URL dell'allegato del documento incluso nella risposta JSON dal server B include le credenziali di accesso (nome utente: password). Il server A risponde alla richiesta lato client restituendo tali oggetti JSON.
Il client ora ha questa informazione:
https://username:password@host:port/dbname/path/to/file.whatever
Attualmente tutti i dati contenuti nel Server B risiedono in un'istanza di database. Se il client ha accesso al nome utente: password al CouchDB, allora tutti i dati potrebbero essere interrogati con tali credenziali di accesso. Mi piace così,
https://username:password@host:port/dbname/_all_docs
Considerazioni sul lato server
CouchDB su Cloudant
Considerazioni sul lato client
Il Javascript in esecuzione sul client richiede una stringa URL per il file. I file a cui si fa riferimento sono strati KML per Google Maps. Un nuovo layer KML viene creato utilizzando questo costruttore.
Cosa sto cercando
Essenzialmente la mia soluzione verrebbe se potessi fornire un collegamento a un allegato di un documento CouchDB senza fornire nome utente / password.
https://host:port/path/to/file.whatever
Cosa ho fatto
Ho dovuto abilitare cURL per PHP sul server A.
sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
sudo /etc/init.d/apache2 restart
Hai un po 'di codice dal blog di David Walsh.
Il mio codice client Javascript ottiene un elenco di metadati del file JSON dal server A. Questi dati includono ID DB univoci e nomi di file (Nessuna password o chiave API). Passo quindi l'ID del documento e il nome del file a un altro servizio sul server A che riecheggia il valore di
get_data('https://username:password@Server B:port/dbname/path/to/file.whatever');
Ora posso fornire i file al client senza rivelare nome utente o password per CouchDB sul Server B.