Come posso archiviare la chiave consumer OAuth v1 e il segreto per un client Twitter desktop open source senza rivelarlo all'utente?


32

Voglio creare un client twitter open-source, desktop client spesso. Mi capita di usare .NET come lingua e Twitterizer come wrapper OAuth / Twitter e la mia app verrà probabilmente rilasciata come open source.

Per ottenere un token OAuth, sono necessarie quattro informazioni:

  1. Token di accesso (nome utente twitter)
  2. Accesso segreto (password twitter)
  3. Chiave del consumatore
  4. Segreto del consumatore

Le seconde due informazioni non devono essere condivise, come una chiave privata PGP. Tuttavia, a causa della modalità di progettazione del flusso di autorizzazione OAuth, è necessario che siano presenti nell'app nativa. Anche se l'applicazione non era open source e la chiave / segreto del consumatore era crittografata, un utente abbastanza esperto poteva accedere alla coppia chiave / segreto del consumatore.

Quindi la mia domanda è: come aggirare questo problema? Qual è la strategia corretta per un client Twitter desktop per proteggere la sua chiave e il segreto del consumatore?


+1 Anch'io ho questa stessa preoccupazione. Tuttavia, la domanda non è in realtà specifica per gli ambienti desktop o Twitter: questo schema di autenticazione è molto comune tra i servizi Web che credo?
Vemv,

Perché la tua domanda può essere astratta a qualcosa come "come archiviare dati segreti su un client", penso che potresti essere in grado di attrarre più risposte se pubblichi una nuova domanda che è meno specifica per Twitter. IMO.
Jeff Welling,

1
+1 Sono anche curioso di sapere quale sia la migliore pratica qui. Nella mia applicazione Qt uso OAuth ma memorizzo i dettagli del consumatore come stringhe (QString) nel file binario.
fejd

1
Jeff, è un'ottima possibilità che io stia facendo qualcosa di completamente sbagliato in OAuth. Sto iniziando ad avere la sensazione di essere in grado di utilizzare la coppia chiave / segreto del consumatore per generare segreti temporanei e che avere un servizio web per generare quei segreti da qualche parte è la strada da percorrere. Generalizzare questa domanda oltre OAuth mancherà di risposte come questa.
Justin Dearing l'

Risposte:


5

Ho trovato una risposta che rispecchia il percorso che stavo prendendo in considerazione di scendere su hueniverse . L'articolo, Beyond the OAuth Web Redirection Flow , offre alcuni suggerimenti, uno dei quali è un URL web che inoltra il processo di scambio di token. Devo trovare un modo per autenticare correttamente che la mia app è ciò che richiede l'autenticazione a questa pagina proxy. Tuttavia, ciò è possibile.


3

Potrei sbagliarmi, ma se si raggruppano le chiavi con l'app desktop o mobile, open source o meno, è possibile accedervi. Se servizi come Twitter e Tumblr ci obbligano a utilizzare l'API solo OAuth, abbiamo due opzioni:

  • imposta un servizio proxy di autenticazione per ogni app
  • raggruppa le chiavi con l'app

Il primo è più difficile e costoso, non necessariamente gestibile per le app piccole e open source. Quest'ultimo significa che l'app può essere bloccata e una volta che gli spammer rubano le chiavi. Poiché Twitter e Tumblr non offrono ancora un'opzione migliore e avvitano tutti i client desktop, compresi i client Open Source, esiste una proposta per distribuire le chiavi "Big Fish" e usarle come fallback .

Infine, esiste un'opzione per forzare ogni utente a ottenere le chiavi API.


3

La sezione 4.6 di RFC 5849 , che definisce OAuth 1, afferma che il segreto del consumatore non è mai stato inteso per l'uso da parte dei consumatori di desktop, nonostante l'uso di Twitter nella pratica. Come ha sottolineato Nelson Elhage in " Dear Twitter ", Twitter può e fa terminare le chiavi consumer dei client desktop, a condizione che il client non sia troppo grande per fallire. Esistono due soluzioni alternative per consentire l'uso di OAuth 1 in un'applicazione desktop o mobile.

Un modo è quello di delegare l'intero protocollo Twitter attraverso un server in cui operi. In questo modo, il segreto del consumatore rimane sul tuo server. Questa è la soluzione consigliata da Dick Hardt , editore delle specifiche OAuth 1. Questa soluzione alternativa non risolve i costi di gestione di questo server.

L'altro modo, come suggerito in un post di Raffi Krikorian al gruppo Google di Google per lo sviluppo e un post di Chris Steipp in una mailing list di Wikipedia, è "far registrare a ciascun utente la propria copia dell'applicazione desktop come proprio consumatore". Quindi l'utente copia e incolla la chiave consumer e il segreto consumer appena registrati nell'applicazione. Il manuale della tua applicazione dovrebbe quindi includere istruzioni dettagliate su come registrare una nuova applicazione sul sito degli sviluppatori di Twitter. Questa limitazione ufficiale presenta alcuni problemi pratici:

  • Il tuo cliente dovrà affrontare uno svantaggio di usabilità rispetto ai noti clienti proprietari.
  • Il modulo per creare una nuova app non sembra offrire un modo per precompilare i campi richiesti. Ciò significa che dovrai aggiornare la procedura dettagliata di registrazione nel tuo manuale ogni volta che Twitter modifica la procedura per la registrazione di un'app.
  • Il contratto di sviluppo prevede che gli utenti abbiano l'età legale per stipulare un contratto vincolante. Ciò significa che un utente della tua applicazione di età compresa tra 13 e 17 anni deve avere un genitore che accetta l'accordo per conto dell'utente.
  • La Politica per gli sviluppatori di Twitter vieta le applicazioni di registrazione di massa e "accovacciamento di nomi", che definisce come "invio di più applicazioni con la stessa funzione con nomi diversi". Non sono a conoscenza di alcun precedente sul fatto che Twitter abbia trattato gli utenti non collegati che hanno registrato copie separate di un'applicazione come "nomi abusivi".

-2

Sto per rispondere ma ti avverto che non ho affrontato me stesso, sto andando fuori dalle migliori pratiche e dall'esperienza pertinente esistente;

Non me ne preoccuperei troppo. Se il tuo client è open source, avrà comunque accesso alla fonte, e provare a controllare ciò che fanno con il tuo programma va comunque contro la natura dell'open source (anche se, cosa importante, ciò che stai cercando di fare non lo fa ).

Se qualcuno ha abbastanza conoscenze per eseguire il debug del programma ed estrarre la chiave, probabilmente sapranno come fare di più e potresti benissimo perdere tempo a cercare di bloccare ulteriormente.

Come precauzione, cambierei le chiavi ogni tanto (se possibile), ma se tutto ciò che possono fare è fingere di essere il tuo programma, questo non mi sembra troppo serio.

Divulgazione completa, non ho familiarità con l'API di Twitter, l'API di Twitterizer, i requisiti oauth o qualsiasi altra cosa che ho detto che sembra discutibile;)


4
Non si tratta di cercare di controllare con il programma, si tratta di persone che si travisano. La chiave del cliente e il segreto è il modo in cui dico a Twitter "questa app è arrivata da me" proprio come un certificato SSL fornisce fiducia. Non distribuirò mai un certificato SSL con un'app Web che ho scritto. Se le persone modificano la mia app, dovrebbero effettivamente richiedere la propria chiave / segreto del consumatore e registrarsi come autore dell'app da Twitter per la loro build.
Justin Dearing l'

Ottimo punto, ho avuto un sospetto furtivo per questo che era la chiave del consumatore, ma non lo sapevo per certo. In tal caso, a dire il vero, non penso che ci sia un modo per proteggere la tua app. A me sembra che Twitter abbia scelto quel metodo in modo che le app mobili possano essere scritte, ma non quelle desktop - le piattaforme mobili sono in gran parte bloccate. In questo caso, il modo migliore per utilizzare l'IMO è inserire la chiave in un file o variabile separato che non si rilascia con il codice sorgente. Per quanto ne so, questo non va contro la GPL. Mi piacerebbe essere smentito in tutto o in tutto questo però ...
Jeff Welling

-4

La chiave utente e il segreto sono associati all'applicazione e non associati all'utente. Con questo in formazione il provider OAuth sa con quale applicazione sta trattando. Il resto, token di accesso e segreto saranno ottenuti dopo aver completato i primi passi.

Vedi questo post del blog per ulteriori informazioni in quanto mostra come funziona il protocollo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.