Dalam istilah yang sangat sederhana, dapatkah seseorang menjelaskan perbedaan antara OAuth 2 dan OAuth 1?
Apakah OAuth 1 sudah usang sekarang? Haruskah kita menerapkan OAuth 2? Saya tidak melihat banyak implementasi OAuth 2; sebagian besar masih menggunakan OAuth 1, yang membuat saya ragu OAuth 2 siap digunakan. Apakah itu?
oauth
oauth-2.0
authorization
sullivan
sumber
sumber
Jawaban:
Eran Hammer-Lahav telah melakukan pekerjaan yang sangat baik dalam menjelaskan mayoritas perbedaan dalam artikelnya Memperkenalkan OAuth 2.0 . Untuk meringkas, berikut adalah perbedaan utama:
Lebih Banyak Arus OAuth untuk memungkinkan dukungan yang lebih baik untuk aplikasi berbasis non-browser. Ini adalah kritik utama terhadap OAuth dari aplikasi klien yang tidak berbasis browser. Misalnya, dalam OAuth 1.0, aplikasi desktop atau aplikasi ponsel harus mengarahkan pengguna untuk membuka browser mereka ke layanan yang diinginkan, mengotentikasi dengan layanan, dan menyalin token dari layanan kembali ke aplikasi. Kritik utama di sini bertentangan dengan pengalaman pengguna. Dengan OAuth 2.0, sekarang ada cara baru bagi aplikasi untuk mendapatkan otorisasi bagi pengguna.
OAuth 2.0 tidak lagi mengharuskan aplikasi klien memiliki kriptografi. Hal ini kembali ke API Auth Twitter lama, yang tidak memerlukan aplikasi untuk token hash HMAC dan string permintaan. Dengan OAuth 2.0, aplikasi dapat membuat permintaan hanya menggunakan token yang dikeluarkan melalui HTTPS.
Tanda tangan OAuth 2.0 jauh lebih mudah. Tidak ada lagi penguraian, penyortiran, atau penyandian khusus.
OAuth 2.0 Token akses "berumur pendek". Biasanya, token OAuth 1.0 Access dapat disimpan selama satu tahun atau lebih (Twitter tidak pernah membiarkannya kedaluwarsa). OAuth 2.0 memiliki gagasan tentang token penyegaran. Meskipun saya tidak sepenuhnya yakin apa ini, tebakan saya adalah bahwa token akses Anda dapat berumur pendek (yaitu sesi berbasis) sementara token penyegaran Anda bisa menjadi "waktu hidup". Anda akan menggunakan token penyegaran untuk mendapatkan token akses baru daripada meminta pengguna untuk mengotorisasi ulang aplikasi Anda.
Akhirnya, OAuth 2.0 dimaksudkan untuk memiliki pemisahan peran yang bersih antara server yang bertanggung jawab untuk menangani permintaan OAuth dan server yang menangani otorisasi pengguna. Informasi lebih lanjut tentang itu dirinci dalam artikel tersebut.
sumber
Saya melihat jawaban yang bagus di sini, tetapi yang saya lewatkan adalah beberapa diagram dan karena saya harus bekerja dengan Spring Framework saya menemukan penjelasan mereka .
Saya menemukan diagram berikut ini sangat berguna. Mereka menggambarkan perbedaan dalam komunikasi antara pihak-pihak dengan OAuth2 dan OAuth1.
OAuth 2
OAuth 1
sumber
OAuth 2
dan langkah 4 untukOAuth 1
.Penjelasan sebelumnya semuanya terlalu rinci dan rumit IMO. Sederhananya, OAuth 2 mendelegasikan keamanan ke protokol HTTPS. OAuth 1 tidak memerlukan ini dan akibatnya memiliki metode alternatif untuk menghadapi berbagai serangan. Metode-metode ini membutuhkan aplikasi untuk terlibat dalam protokol keamanan tertentu yang rumit dan dapat sulit diimplementasikan. Oleh karena itu, lebih mudah untuk hanya mengandalkan HTTPS untuk keamanan sehingga pengembang aplikasi tidak perlu khawatir tentang hal itu.
Mengenai pertanyaan Anda yang lain, jawabannya tergantung. Beberapa layanan tidak ingin memerlukan penggunaan HTTPS, dikembangkan sebelum OAuth 2, atau memiliki beberapa persyaratan lain yang dapat mencegah mereka menggunakan OAuth 2. Selain itu, ada banyak perdebatan tentang protokol OAuth 2 itu sendiri. Seperti yang Anda lihat, Facebook, Google, dan beberapa lainnya masing-masing memiliki versi protokol yang sedikit berbeda. Jadi beberapa orang tetap menggunakan OAuth 1 karena lebih seragam di berbagai platform. Baru-baru ini, protokol OAuth 2 telah difinalisasi tetapi kami belum melihat bagaimana adopsi akan diambil.
sumber
Perhatikan ada argumen keamanan yang serius terhadap penggunaan Oauth 2:
satu artikel suram
dan yang lebih teknis
Perhatikan ini berasal dari penulis utama Oauth 2.
Poin-poin penting:
Oauth 2 tidak menawarkan keamanan di atas SSL sementara Oauth 1 tidak bergantung pada transportasi.
dalam arti SSL tidak aman karena server tidak memverifikasi koneksi dan perpustakaan klien umum membuatnya mudah untuk mengabaikan kegagalan.
Anda dapat menghilangkan semua keamanan Anda, yang jauh lebih sulit dilakukan di OAuth 1.0:
sumber
Keamanan protokol OAuth 1.0 ( RFC 5849 ) bergantung pada asumsi bahwa kunci rahasia yang tertanam dalam aplikasi klien dapat dirahasiakan. Namun, anggapan itu naif.
Dalam OAuth 2.0 ( RFC 6749 ), aplikasi klien naif seperti itu disebut klien rahasia . Di sisi lain, aplikasi klien di lingkungan di mana sulit untuk menjaga kerahasiaan kunci rahasia disebut klien publik . Lihat 2.1. Jenis Klien untuk detail.
Dalam hal itu, OAuth 1.0 adalah spesifikasi hanya untuk klien rahasia.
" OAuth 2.0 dan Jalan Menuju Neraka " mengatakan bahwa OAuth 2.0 kurang aman, tetapi tidak ada perbedaan praktis dalam tingkat keamanan antara klien OAuth 1.0 dan klien rahasia OAuth 2.0. OAuth 1.0 mengharuskan untuk menghitung tanda tangan, tetapi itu tidak meningkatkan keamanan jika sudah dipastikan bahwa kunci rahasia di sisi klien dapat dirahasiakan. Komputasi tanda tangan hanyalah perhitungan rumit tanpa peningkatan keamanan praktis. Maksud saya, dibandingkan dengan kesederhanaan bahwa klien OAuth 2.0 terhubung ke server lebih dari TLS dan hanya menyajikan
client_id
danclient_secret
, tidak dapat dikatakan bahwa perhitungan rumit lebih baik dalam hal keamanan.Selain itu, RFC 5849 (OAuth 1.0) tidak menyebutkan apa pun tentang pengalihan terbuka sementara RFC 6749 (OAuth 2.0) tidak menyebutkan apa pun . Artinya,
oauth_callback
parameter OAuth 1.0 dapat menjadi lubang keamanan.Oleh karena itu, saya tidak berpikir OAuth 1.0 lebih aman daripada OAuth 2.0.
[14 April 2016] Penambahan untuk memperjelas poin saya
Keamanan OAuth 1.0 bergantung pada perhitungan tanda tangan. Tanda tangan dihitung menggunakan kunci rahasia di mana kunci rahasia adalah kunci bersama untuk HMAC-SHA1 ( RFC 5849, 3.4.2 ) atau kunci pribadi untuk RSA-SHA1 ( RFC 5849, 3.4.3 ). Siapa pun yang mengetahui kunci rahasia dapat menghitung tanda tangan. Jadi, jika kunci rahasia dikompromikan, kompleksitas perhitungan tanda tangan tidak ada artinya namun kompleks.
Ini berarti keamanan OAuth 1.0 tidak bergantung pada kompleksitas dan logika perhitungan tanda tangan tetapi hanya pada kerahasiaan kunci rahasia. Dengan kata lain, apa yang diperlukan untuk keamanan OAuth 1.0 hanyalah syarat bahwa kunci rahasia dapat dirahasiakan. Ini mungkin terdengar ekstrim, tetapi perhitungan tanda tangan tidak menambah peningkatan keamanan jika kondisinya sudah terpenuhi.
Demikian juga, klien rahasia OAuth 2.0 mengandalkan kondisi yang sama. Jika kondisinya sudah terpenuhi, apakah ada masalah dalam membuat koneksi aman menggunakan TLS dan mengirim
client_id
danclient_secret
ke server otorisasi melalui koneksi aman? Apakah ada perbedaan besar dalam tingkat keamanan antara klien rahasia OAuth 1.0 dan OAuth 2.0 jika keduanya bergantung pada kondisi yang sama?Saya tidak dapat menemukan alasan yang baik untuk OAuth 1.0 untuk menyalahkan OAuth 2.0. Faktanya adalah bahwa (1) OAuth 1.0 hanyalah spesifikasi hanya untuk klien rahasia dan (2) OAuth 2.0 telah menyederhanakan protokol untuk klien rahasia dan juga mendukung klien publik . Terlepas dari apakah itu dikenal baik atau tidak, aplikasi smartphone diklasifikasikan sebagai klien publik ( RFC 6749, 9 ), yang mendapat manfaat dari OAuth 2.0.
sumber
Tanda tangan OAuth 2.0 tidak diperlukan untuk panggilan API yang sebenarnya setelah token dibuat. Hanya memiliki satu token keamanan.
OAuth 1.0 mengharuskan klien untuk mengirim dua token keamanan untuk setiap panggilan API, dan menggunakan keduanya untuk menghasilkan tanda tangan. Ini membutuhkan titik akhir sumber daya yang dilindungi memiliki akses ke kredensial klien untuk memvalidasi permintaan.
Di sini dijelaskan perbedaan antara OAuth 1.0 dan 2.0 dan bagaimana keduanya bekerja.
sumber
OAuth 2 tampaknya hanya buang-buang waktu (dari mulut seseorang yang sangat terlibat di dalamnya):
https://hueniverse.com/oauth-2-0-and-the-road-to-hell-8eec45921529
Dia mengatakan (diedit untuk singkatnya dan dicetak tebal untuk penekanan):
sumber
Jika Anda memerlukan penjelasan lanjutan, Anda perlu membaca kedua spesifikasi:
https://oauth.net/core/1.0a/
https://oauth.net/2/
Jika Anda membutuhkan penjelasan yang jelas tentang perbedaan aliran, ini dapat membantu Anda:
OAuth 1.0 Flow
OAuth 2.0 Flow
Sumber: https://codiscope.com/oauth-2-0-vs-oauth-1-0/
sumber
OAuth 2.0 berjanji untuk menyederhanakan hal-hal dengan cara berikut:
Sumber: http://blog.apigee.com/detail/oauth_differences
sumber
Dari sudut pandang keamanan, saya akan memilih OAuth 1. Lihat OAuth 2.0 dan jalan menuju neraka
kutipan dari tautan itu: "Jika Anda saat ini berhasil menggunakan 1.0, abaikan 2.0. Ini tidak menawarkan nilai nyata di atas 1.0 (saya menduga pengembang klien Anda sudah menemukan tanda tangan 1,0 sekarang)
Jika Anda baru mengenal ruang ini, dan anggap diri Anda seorang pakar keamanan, gunakan 2.0 setelah memeriksa fitur-fiturnya dengan cermat. Jika Anda bukan seorang ahli, gunakan 1.0 atau salin implementasi 2.0 dari penyedia yang Anda percaya untuk memperbaikinya (dokumen API Facebook adalah tempat yang baik untuk memulai). 2.0 lebih baik untuk skala besar, tetapi jika Anda menjalankan operasi besar, Anda mungkin memiliki beberapa pakar keamanan di lokasi untuk mengetahui semuanya untuk Anda. "
sumber