Bagaimana cara menyimpan kunci dan rahasia konsumen OAuth v1 untuk klien Twitter desktop open source tanpa mengungkapkannya kepada pengguna?

32

Saya ingin membuat klien twitter tebal, desktop, dan open source. Saya kebetulan menggunakan .NET sebagai bahasa saya dan Twitterizer sebagai pembungkus OAuth / Twitter saya, dan aplikasi saya kemungkinan akan dirilis sebagai sumber terbuka.

Untuk mendapatkan token OAuth, diperlukan empat informasi:

  1. Token Akses (nama pengguna twitter)
  2. Rahasia Akses (kata sandi twitter)
  3. Kunci Konsumen
  4. Rahasia Konsumen

Dua informasi kedua tidak boleh dibagikan, seperti kunci pribadi PGP. Namun, karena cara alur otorisasi OAuth dirancang, ini harus ada di aplikasi asli. Bahkan jika aplikasi itu bukan open source, dan kunci konsumen / rahasia dienkripsi, pengguna yang cukup terampil dapat memperoleh akses ke kunci konsumen / pasangan rahasia.

Jadi pertanyaan saya adalah, bagaimana saya mengatasi masalah ini? Apa strategi yang tepat untuk klien Twitter desktop untuk melindungi kunci dan rahasia konsumennya?

Justin Dearing
sumber
+1 Saya juga memiliki kekhawatiran yang sama. Namun pertanyaannya sebenarnya tidak spesifik untuk lingkungan desktop atau Twitter - skema otentikasi ini sangat umum di antara layanan web yang saya percaya?
vemv
Karena pertanyaan Anda dapat diabstraksikan menjadi sesuatu seperti "bagaimana cara menyimpan data rahasia pada klien" Saya pikir Anda mungkin dapat menarik lebih banyak jawaban jika Anda mengirim pertanyaan baru yang kurang spesifik untuk twitter. IMO.
Jeff Welling
1
+1 Saya juga ingin tahu tentang apa praktik terbaik di sini. Dalam aplikasi Qt saya, saya menggunakan OAuth tapi saya hanya menyimpan detail Konsumen sebagai string (QString) dalam biner.
fejd
1
Jeff, kemungkinan mereka sangat bagus. Aku melakukan sesuatu yang salah dengan OAuth. Saya mulai mendapatkan perasaan bahwa saya seharusnya menggunakan kunci konsumen / pasangan rahasia untuk menghasilkan rahasia sementara dan bahwa memiliki layanan web untuk menghasilkan rahasia-rahasia itu di suatu tempat adalah cara untuk pergi. Generalisasi pertanyaan ini di luar OAuth akan kehilangan jawaban seperti itu.
Justin Dearing

Jawaban:

5

Saya menemukan jawaban yang mencerminkan jalan yang saya pertimbangkan turun di hueniverse . Artikel tersebut, Beyond the OAuth Web Redirection Flow , menawarkan beberapa saran, salah satunya adalah url web yang mewakili proses pertukaran token. Saya harus mencari cara untuk mengautentikasi dengan benar bahwa aplikasi saya adalah yang meminta otentikasi ke halaman proxy ini. Namun, itu mungkin.

Justin Dearing
sumber
3

Saya mungkin salah, tetapi jika Anda menggabungkan kunci dengan desktop atau aplikasi seluler, open source atau tidak, adalah mungkin untuk mengaksesnya. Jika layanan seperti Twitter dan Tumblr memaksa kami menggunakan API khusus OAuth, kami memiliki dua opsi:

  • menyiapkan layanan proxy auth untuk setiap aplikasi
  • bundel kunci dengan aplikasi

Yang pertama lebih sulit dan mahal, tidak harus dipelihara untuk aplikasi sumber kecil dan terbuka. Yang terakhir berarti bahwa aplikasi dapat dan akan diblokir, begitu spammer mencuri kunci. Karena Twitter dan Tumblr belum memberikan opsi yang lebih baik, dan mengacaukan semua klien desktop, termasuk klien Open Source, ada proposal untuk mendistribusikan kunci "Big Fish", dan menggunakannya sebagai fallback .

Akhirnya, ada opsi untuk memaksa setiap pengguna untuk mendapatkan kunci API.

sastanin
sumber
3

Bagian 4.6 dari RFC 5849 , yang mendefinisikan OAuth 1, menyatakan bahwa rahasia konsumen tidak pernah dimaksudkan untuk digunakan oleh konsumen desktop, meskipun dalam praktiknya Twitter menggunakannya. Seperti yang ditunjukkan Nelson Elhage di " Dear Twitter ", Twitter dapat dan memang menghentikan kunci konsumen klien desktop, asalkan klien tidak terlalu besar untuk gagal. Tetapi ada dua solusi untuk memungkinkan penggunaan OAuth 1 di desktop atau aplikasi seluler.

Salah satu caranya adalah dengan mem-proxy seluruh protokol Twitter melalui server yang Anda operasikan. Dengan cara ini, rahasia konsumen tetap ada di server Anda. Ini adalah solusi yang disarankan oleh Dick Hardt , editor spec OAuth 1. Penanganan masalah ini tidak membahas biaya pengoperasian server ini.

Cara lain, seperti yang disarankan dalam posting oleh Raffi Krikorian kepada grup pengembangan bicara Google Twitter dan posting oleh Chris Steipp ke milis Wikipedia, adalah dengan "meminta setiap pengguna mendaftarkan salinan aplikasi desktop Anda sebagai konsumennya sendiri." Kemudian pengguna akan menyalin dan menempelkan kunci konsumen yang baru terdaftar dan rahasia konsumen ke dalam aplikasi Anda. Manual untuk aplikasi Anda kemudian perlu memasukkan instruksi terperinci tentang cara mendaftarkan aplikasi baru di situs pengembang Twitter. Keterbatasan resmi ini memiliki beberapa masalah praktis:

  • Klien Anda akan menghadapi kerugian kegunaan dibandingkan dengan klien berpemilik terkenal.
  • The form untuk membuat aplikasi baru tidak muncul untuk menawarkan cara untuk pra-mengisi bidang yang diperlukan. Ini berarti Anda harus memperbarui panduan pendaftaran di manual Anda setiap kali Twitter mengubah prosedur untuk mendaftarkan aplikasi.
  • Perjanjian pengembang mengharuskan pengguna untuk memiliki usia legal untuk memasuki kontrak yang mengikat. Ini berarti pengguna aplikasi Anda yang berusia 13 hingga 17 harus memiliki orang tua yang menerima perjanjian atas nama pengguna.
  • Kebijakan Pengembang Twitter melarang aplikasi pendaftaran massal dan "jongkok nama", yang didefinisikan sebagai "mengirim beberapa aplikasi dengan fungsi yang sama dengan nama yang berbeda." Saya tidak mengetahui adanya preseden apakah Twitter telah memperlakukan pengguna yang tidak terkait yang telah mendaftarkan salinan terpisah dari satu aplikasi sebagai "nama penghuni liar".
Damian Yerrick
sumber
-2

Saya akan menjawab tetapi diingatkan bahwa saya belum pernah menangani hal ini sendiri, saya akan meninggalkan praktik terbaik dan pengalaman relevan yang ada;

Saya tidak akan terlalu khawatir tentang itu. Jika klien Anda adalah open source maka mereka akan memiliki akses ke sumbernya, dan mencoba untuk mengendalikan apa yang mereka lakukan dengan program Anda bertentangan dengan sifat open source (walaupun penting, apa yang Anda coba lakukan tidak ).

Jika seseorang memiliki pengetahuan yang cukup untuk men-debug program Anda dan mengekstrak kunci Anda, mereka mungkin tahu bagaimana melakukan lebih dari itu dan Anda bisa membuang-buang waktu untuk mencoba mengunci lebih jauh.

Sebagai tindakan pencegahan, saya akan sering mengganti kunci (jika mungkin), tetapi jika yang bisa mereka lakukan hanyalah berpura-pura menjadi program Anda, itu kedengarannya tidak terlalu serius bagi saya.

Pengungkapan penuh, saya tidak terbiasa dengan Twitters API, API twitterizer, persyaratan lain, atau apa pun yang saya katakan itu terdengar dipertanyakan;)

Jeff Welling
sumber
4
Ini bukan tentang mencoba mengendalikan dengan yang mereka lakukan dengan program ini, ini tentang orang-orang yang salah menggambarkan diri mereka sendiri. Kunci dan rahasia comsumer adalah bagaimana saya memberi tahu twitter "aplikasi ini datang kepada saya" seperti sertifikat SSL yang memberikan kepercayaan. Saya tidak akan pernah mendistribusikan sertifikat SSL dengan aplikasi web yang saya tulis. Jika orang memodifikasi aplikasi saya, mereka memang harus mengajukan kunci konsumen / rahasia mereka sendiri dan mendaftarkan diri sebagai penulis aplikasi dari twitter untuk pembuatan mereka.
Justin Dearing
Poin yang sangat bagus, saya memiliki kecurigaan menyelinap untuk apa kunci konsumen tetapi tidak tahu pasti. Dalam hal ini, jujur, saya tidak berpikir ada adalah cara untuk melindungi aplikasi Anda. Bagi saya ini kedengarannya seperti twitter memilih metode itu sehingga aplikasi seluler dapat ditulis tetapi yang desktop tidak - platform seluler sebagian besar dikunci. Dalam hal ini cara terbaik untuk menggunakan IMO adalah dengan meletakkan kunci di file atau variabel terpisah yang tidak Anda lepaskan dengan kode sumber. Setahu saya ini tidak bertentangan dengan GPL. Saya ingin dibuktikan salah pada semua atau semua ini ..
Jeff Welling
-4

Kunci dan rahasia konsumen adalah batasan aplikasi dan bukan batasan pengguna. Dengan formasi ini penyedia OAuth tahu dengan aplikasi apa yang dihadapinya. Selebihnya, token Akses dan rahasia akan diperoleh setelah langkah pertama dilakukan.

Lihat posting blog ini untuk informasi lebih lanjut karena menunjukkan cara kerja protokol.

Yblih
sumber