2011-07-16 8 views
35

Quando si utilizza l'autenticazione di base HTTP, il nome utente può essere passato nell'URL, ad es.Caratteri del nome utente di escape negli URL di autenticazione di base

http://[email protected]/path/ 

Ma ora supponiamo che il nome utente sia un indirizzo di posta elettronica, ad es. [email protected] Questo è chiaramente ambiguo:

http://[email protected]@foo.com/path/ 

C'è un modo per sfuggire al carattere @ nel nome utente? Ho provato la codifica URL standard:

http://david%[email protected]/path/ 

Ma questo non è stato.

+0

Non è possibile utilizzare @ in URL. O ti ho sbagliato? – Hnatt

+0

So che sono un po 'in ritardo per la festa, ma ti sei semplicemente perso la parte della password? la sintassi standard dovrebbe essere 'http (s): // user: pass @ host'. Quindi nel tuo caso dovrebbe essere 'http (s): //david%40company.com: Y0ur% 24up3r% 243cur3P% 40% 24% 24w0rd @ foo.com'. – FatalMerlin

+0

@FatalMerlin puoi avere sia il sapore con il solo nome utente, sia con nome utente e password. Anche se penso che sia ortogonale al problema dell'uscita. –

risposta

52

Secondo RFC 3986, paragrafo 3.2.1, ha bisogno di essere codificato per cento:

userinfo = *(unreserved/pct-encoded/sub-delims/":") 

così sembra

http://david%[email protected]/path/ 

è giusto. Dove stai cercando di leggerlo? Forse hai bisogno di decodificare manualmente il valore?

+0

Ho il mio codice lato server che elabora le credenziali. Devo eseguire il debug e vedere esattamente ciò che ricevo quando scappo in questo modo. Seguirò! –

+2

I client non sembrano funzionare bene con quella sintassi. per esempio. IE9 lo blocca anche prima di inviare qualsiasi richiesta e fornisce l'errore "Impossibile trovare Windows 'http: //david%[email protected]/path/". Controlla l'ortografia e riprova. ". Questo mi porta a credere che questa sintassi non sia effettivamente supportata, nonostante ciò che potrebbe sembrare dalla RFC. –

+0

Funziona bene usando il ricciolo ... –

Problemi correlati