2012-02-13 6 views
6

Qual è il modo migliore per eseguire l'autenticazione di Twitter OAuth in modo sicuro in JavaScript?Autenticazione sicura OAuth di Twitter in JavaScript/jQuery (oltre a helper lato server)

Sto provando a scrivere un programma per consentire all'utente di analizzare il suo utilizzo di Twitter e follower/amici. Ho scritto una versione lato server che funziona usando il modulo tweepy python.

Mi piacerebbe condividerlo con le persone, ma mi piacerebbe che funzionasse nel browser per essere scalabile rispetto a funzionare sul mio piccolo server.

vedo un'altra domanda dove il risultato è che non è raccomandato e non sicuro: JavaScript OAuth sign in with Twitter

che ha un senso se si mandavano la (app) segreto utente o l'accesso segreto (utente) nella app JavaScript.

Ma perché non potevo costruire l'URL sul lato server come qui - http://djangosnippets.org/snippets/1353/

quindi inviare l'URL di autenticazione al browser, qualcosa di simile dal strumento OAuth nella pagina di Twitter My Applications (non credenziali valide)

GET & https% 3A% 2F% 2Fapi.twitter.com% 2F1% 2F & ottenere% 252Faccount% 252Fverify_credentials_json% 3D% 26oauth_consumer_key% GD0bgcgMU4MDwNfKQpLFQS3% 26oauth_nonce% 3D24ad5049501dee1292afd8cf22307d68% 26oauth_signature_method% 3DHMAC-SHA1% 26oauth_timestamp% 3D1329173626 % 26oauth_token% uPUpxsBc3D283768289LtQ6R1E z1KeD8DOSsm5XpqJaKI28ysYh% 26oauth_version% 3D1.0

Quindi utilizzare jQuery per autenticarsi con le credenziali dell'utente ed eseguire l'analisi.

È un lavoro significativo, mi dispiacerebbe farlo e poi scoprire che non funziona o è un approccio non sicuro. (o è già stato fatto)

È sicuro? Non sembra esporre alcun segreto.

Funzionerà?

Eventuali puntatori/esempi sul modo corretto di eseguire l'autenticazione per un jQuery noob, con l'Autorizzazione necessaria: intestazione e elaborazione cookie/reindirizzamento?

Mi sento come se mi mancasse qualcosa e c'è una ragione per cui questo non funzionerà, o dovrebbe già esistere da qualche parte, ma non l'ho trovato. Grazie molto!

risposta

3

Il problema, Mr. McNuts, è che oAuth richiede di trasmettere il segreto del consumatore, quindi anche se si crea l'URL sul server, lo si ritorna comunque alla pagina Web, che esporrà ancora il tuo segreto del consumatore tramite un proxy HTTP.

Per evitare di esporre il proprio segreto, è necessario utilizzare un proxy per eseguire la richiesta di autorizzazione di Twitter e restituire il token oauth al browser. Se sei davvero preoccupato per le dimensioni, guarderei una soluzione su scala proporzionale come GAE o Heroku.

+0

Ho pensato che il punto di divisione della chiave del consumatore e del segreto del consumatore era che tu potrebbe esporre la chiave e nessuno può fare nulla senza il segreto. Cosa potrebbe fare qualcuno con solo la chiave del consumatore, se non avevano il segreto del consumatore? –

+0

Sì, hai ragione. Quello che stai essenzialmente proponendo è che il tuo server firmi usando il tuo segreto di consumatore, quindi passa di nuovo al client. Potresti farlo, ma non è più scalabile del semplice fatto che il tuo server effettui la richiesta per conto dell'utente. – Alan

+0

Sì, in pratica voglio eseguire il proxy dell'autenticazione e fare in modo che il browser faccia un sacco di chiamate API. Saranno poche centinaia di chiamate, fino ai limiti di strozzatura. Inoltre impiegheranno molto tempo e legheranno le risorse mentre sono in esecuzione. Quindi preferisco davvero non farlo sul server, saranno gli ordini di grandezza più carichi. Desidera trasferire un URL o un token al browser e utilizzarlo per effettuare chiamate API con jQuery o puro JavaScript. –

0

Non capisco molto bene l'approccio che stai proponendo. Ma in termini generali OAuth non può essere implementato in modo sicuro da un lato client del browser (eccetto ambienti chiusi sicuri come Java o Flash). L'implementazione del processo OAuth su Javascript è abbastanza possibile ma esporrai il tuo token segreto/consumatore. Quindi chiunque sarebbe in grado di soppiantare la tua applicazione identificarsi con intenzioni maliziose come rubare dati sensibili agli utenti. Se vuoi ancora lavorare con JS, ti consiglio di implementare il processo sicuro (autenticazione e archiviazione finale del token) sul lato server usando Node.js

Problemi correlati