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
dan client_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
dan client_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.