2013-01-12 17 views
7

In Concessione implicita, il token di accesso viene reinviato nell'URL di richiamata. Non è un rischio per la sicurezza perché, se questo URL di richiamata è memorizzato nella cache nell'hop. In generale, si consiglia di non inviare dati sensibili nei parametri URL e questo token di accesso sarà un token per accedere a tutte le risorse utente protette. Quindi, perché viene passato come frammento nell'URLQuanto è sicuro il sussidio implicito di Oauth 2.0?

risposta

2

Elaborando risposta @ di Vlatko ...

per mitigare il rischio di mandare il token nel frammento (o tramite qualsiasi altra sovvenzione OAuth2):

L'emissione di token di accesso di breve durata (come ha detto @vlatko) ridurrà l'impatto di un token che non è trapelato, ma non è una misura preventiva.

+1

Anche quando token di accesso viene inviato tramite https, dal momento che è un frammento, non sarà possibile per i server di hop intermedi nella rete di sniffarlo. – Karthik

+0

Intendevi anche se inviato attraverso http? – codeprogression

+0

Se assumiamo Oauth Server come X e il client richiede l'accesso come Y. Quindi anche quando il token di accesso viene inviato come frammento in https, da X a Y, le macchine intermedie nella rete www da X a Y possono leggere questo token di accesso (es. l'intercettazione su https query params/fragments è facile come intercettare una query params/frammenti http). Solo i dati nel corpo HTTP sono crittografati in caso di https. – Karthik

2

Come hai fatto notare, il token passa il frammento URI. Poiché i browser non inviano frammenti di URL ai server HTTP, le probabilità che qualcuno possa intercettare e prelevare il token di accesso vengono drasticamente ridotte.

Ci sono anche misure di sicurezza aggiuntive, come solo l'emissione di token di accesso di breve durata nel flusso di finanziamenti impliciti.

Ulteriori informazioni in OAuth2 threat models document.

+0

Anche quando token di accesso viene inviato tramite HTTPS, fin dalla sua un frammento, Non sarà possibile per i server hop intermedio della rete per annusarla – Karthik

5

Hmmm, temo ci siano alcune incomprensioni nelle risposte di cui sopra. Mentre le stringhe di query URL sono protette quando si utilizza TLS, e quindi il token di accesso è protetto in volo, viene esposto nel browser degli utenti (parte della loro cronologia) e anche nei log del browser di destinazione. La maggior parte dei browser Web registrerà l'intero URL della richiesta in arrivo. Il loro è un ulteriore problema noto come problema di perdita "referer" in cui la stringa di query verrà passata a siti di terze parti. Una buona panoramica può essere trovato a:

http://blog.httpwatch.com/2009/02/20/how-secure-are-query-strings-over-https/

+0

vlatko - si ha ragione nel dire che il frammento URI ha alcune proprietà speciali e pertanto i miei commenti sopra riportati non si applicano in modo rigoroso. Tuttavia, questo è un aspetto molto fragile dello scambio di messaggi: si sta letteralmente dipendendo da un comportamento specifico del browser su un reindirizzamento per proteggere il flusso (che omette il componente frammento di un URI su un reindirizzamento).Se il frammento URI viene prelevato da qualche parte, produce un token multiuso per l'attaccante. – user3101375

+0

Hai completamente ragione. Questo tipo di autenticazione non è sicuro per definizione. –