La sicurezza del protocollo OAuth 1.0 ( RFC 5849 ) si basa sul presupposto che una chiave segreta incorporata in un'applicazione client può essere mantenuta riservata. Tuttavia, il presupposto è ingenuo.
In OAuth 2.0 ( RFC 6749 ), un'applicazione client così ingenua è chiamata client confidenziale . D'altra parte, un'applicazione client in un ambiente in cui è difficile mantenere una chiave segreta riservata viene chiamata client pubblico . Vedi 2.1. Tipi di client per i dettagli.
In tal senso, OAuth 1.0 è una specifica solo per i client riservati.
" OAuth 2.0 e la strada per l'inferno " afferma che OAuth 2.0 è meno sicuro, ma non esiste alcuna differenza pratica nel livello di sicurezza tra i client OAuth 1.0 e i client confidenziali OAuth 2.0. OAuth 1.0 richiede il calcolo della firma, ma non migliora la sicurezza se è già garantito che una chiave segreta sul lato client può essere mantenuta riservata. La firma informatica è solo un calcolo ingombrante senza alcun miglioramento pratico della sicurezza. Voglio dire, rispetto alla semplicità che un client OAuth 2.0 si connette a un server tramite TLS e si presenta client_id
e client_secret
, non si può dire che il calcolo ingombrante sia migliore in termini di sicurezza.
Inoltre, RFC 5849 (OAuth 1.0) non menziona nulla sui redirector aperti mentre RFC 6749 (OAuth 2.0) lo fa. Cioè, il oauth_callback
parametro di OAuth 1.0 può diventare una falla di sicurezza.
Pertanto, non credo che OAuth 1.0 sia più sicuro di OAuth 2.0.
[14 aprile 2016] Aggiunta per chiarire il mio punto
La sicurezza di OAuth 1.0 si basa sul calcolo delle firme. Una firma viene calcolata utilizzando una chiave segreta in cui una chiave segreta è una chiave condivisa per HMAC-SHA1 ( RFC 5849, 3.4.2 ) o una chiave privata per RSA-SHA1 ( RFC 5849, 3.4.3 ). Chiunque conosca la chiave segreta può calcolare la firma. Quindi, se la chiave segreta è compromessa, la complessità del calcolo della firma è insignificante per quanto complessa.
Ciò significa che la sicurezza di OAuth 1.0 non si basa sulla complessità e sulla logica del calcolo della firma, ma semplicemente sulla riservatezza di una chiave segreta. In altre parole, ciò che è necessario per la sicurezza di OAuth 1.0 è solo la condizione che una chiave segreta possa essere mantenuta riservata. Questo può sembrare estremo, ma il calcolo della firma non aggiunge alcun miglioramento della sicurezza se la condizione è già soddisfatta.
Allo stesso modo, i client riservati di OAuth 2.0 fanno affidamento sulla stessa condizione. Se la condizione è già soddisfatta, c'è qualche problema nella creazione di una connessione protetta tramite TLS e nell'invio client_id
e client_secret
a un server di autorizzazione tramite la connessione protetta? C'è qualche grande differenza nel livello di sicurezza tra i client riservati di OAuth 1.0 e OAuth 2.0 se entrambi si affidano alla stessa condizione?
Non riesco a trovare alcun motivo valido per OAuth 1.0 per incolpare OAuth 2.0. Il fatto è semplicemente che (1) OAuth 1.0 è solo una specifica solo per i client confidenziali e (2) OAuth 2.0 ha semplificato il protocollo per i client confidenziali e anche i client pubblici supportati . Indipendentemente dal fatto che sia noto o meno, le applicazioni per smartphone sono classificate come client pubblici ( RFC 6749, 9 ), che beneficiano di OAuth 2.0.