2011-12-15 7 views
24

Guardando Twitter OAuth Libraries, ho visto questa nota:Come è possibile non esporre la chiave segreta con una libreria OAuth Javascript?

Siate cauti quando si usa JavaScript con OAuth. Non esporre le tue chiavi.

Quindi, guardando jsOAuth examples, ho notato che le chiavi sono esposte nel codice.

Quindi la mia domanda è: come è possibile non esporre le chiavi quando si utilizza una libreria OAuth in Javascript?

Grazie.

AGGIORNAMENTO: Ok, forse jsOAuth non è la libreria corretta da utilizzare, ma come è possibile eseguire l'autenticazione con OAuth su un sito Web Javascript completo?

+0

Invece di aggiungere una nuova domanda a questa discussione, è necessario contrassegnarla come risolta e inserirne una nuova, in particolare le domande non sono COSÌ simili. La risposta alla tua domanda di follow-up è disponibile qui: [Secure OAuth in Javascript] (http://stackoverflow.com/questions/6144826/secure-oauth-in-javascript) –

+0

Il titolo della mia domanda non è cambiato. Forse vuoi che togli la nota jsOAuth – rico

+0

Accetta la risposta di refp già ... :) –

risposta

10

Come detto nella documentazione collegata da voi:

scritto in JavaScript, jsOAuth mira ad essere una libreria open source OAuth completamente caratterizzata per l'uso in Adobe AIR, Appcelerator Titanium e PhoneGap. Infatti, ovunque sia possibile utilizzare javascript e ha XMLHttpRequests su più domini. Per motivi di sicurezza jsOAuth non funziona nel browser. I browser sono menzionati qui solo per eseguire la suite di test. Se hai bisogno di jsOAuth nel browser, scrivi un'estensione.


Una buona risposta alla tua domanda aggiunto è disponibile qui:

5

L'unico modo davvero ragionevole, in questo momento, di fare OAuth 1 nel browser, è indirizzare le chiamate API tramite il tuo server.

Non c'è modo, per quanto ho capito, intorno a questo. Se esegui OAuth 1.0a chiamate tramite JavaScript dal browser -> Dovrai esporre il tuo segreto utente e accedere al segreto del token, almeno per l'utente finale.

Non è possibile memorizzare queste credenziali in:

  • un cookie, l'utente può trovarli.
  • archivio locale, l'utente può trovarli (meglio dei cookie però, dal momento che non comporta l'invio di un cookie avanti e indietro tutto il tempo via HTTP)
  • in javascript, l'utente può trovarli (anche se questo è probabilmente la cosa migliore da fare perché è più facile oscurare).

Se fosse solo il token segreto di accesso che è stato esposto per l'utente finale, che sarebbe sopportabile - dal momento che è in realtà lui/lei che hanno autenticato la vostra applicazione. Ma perdere il tuo segreto di consumatore non è poi così caldo, significa che la tua domanda è idonea al furto di identità. Qualcun altro potrebbe scrivere un'app che afferma di essere la tua app.

Anche se l'hai fatto funzionare in modo sicuro nel browser, sei ostacolato da blocchi di sicurezza del dominio incrociato.

2

È anche possibile creare uno script che invii tutti i valori e i parametri necessari al server per eseguire la firma.

L'URL firmato può quindi essere restituito al client (browser) che a sua volta esegue la richiesta effettiva.

Ho implementato OAuth 1.0a sull'API di Twitter in questo modo utilizzando le richieste jsonp. Il vantaggio di questo è che il corpo della risposta non viene inoltrato tramite il server, risparmiando larghezza di banda.

In questo modo puoi avere il tuo biscotto e mangiarlo anche tu.

Problemi correlati