Saya sedang membangun aplikasi web dan layanan web yang tenang.
Saya telah membaca berbagai artikel tentang cara terbaik untuk mengotentikasi permintaan ke layanan web.
Pilihan terbaik bagi saya tampaknya menggunakan otentikasi dasar HTTP. Hampir setiap artikel yang saya baca mengatakan bahwa otentikasi harus dienkripsi melalui SSL atau yang setara.
Saya tidak sepenuhnya yakin apa ini melibatkan. Apakah ini berarti seluruh layanan web saya harus berada di server yang aman? Apakah ini akan memperlambat segalanya?
web-services
rest
authentication
ssl
https
Gaz_Edge
sumber
sumber
Jawaban:
Pertama-tama, cobalah untuk memahami bagaimana SSL (HTTPS) dan otentikasi HTTP bekerja.
Metode otentikasi HTTP biasa (Intisari, Dasar, dan segala bentuk + skema otentikasi berbasis cookie yang dapat Anda terapkan di atas HTTP) semuanya tidak aman sendiri, karena mereka mengirim informasi otentikasi kurang lebih dalam teks yang jelas. Apakah data di bidang POST atau header, dan apakah pengkodean base64 diterapkan, tidak masalah sama sekali dalam hal ini, kata sandi jelas terlihat oleh siapa pun yang memiliki akses ke lalu lintas jaringan. Ini berarti bahwa otentikasi HTTP melalui saluran yang tidak terpercaya tidak berharga: yang diperlukan seorang penyerang untuk membaca kata sandi Anda adalah mengendus jaringan kecil.
SSL mengimplementasikan saluran komunikasi yang aman melalui saluran yang pada dasarnya tidak aman. Ini berfungsi, kira-kira, sebagai berikut:
Perhatikan beberapa poin penting di sini:
Jadi jelas, ada beberapa overhead yang terlibat, tapi itu tidak seburuk yang Anda kira - itu sebagian besar pada skala di mana "melemparkan lebih banyak perangkat keras padanya" adalah respons yang tepat, kecuali Anda sedang mempersiapkan lalu lintas dalam jumlah sangat besar ( pikirkan Google atau Facebook). Dalam keadaan normal, yaitu penggunaan aplikasi web biasa, overhead SSL dapat diabaikan, dan akibatnya, segera setelah Anda memiliki data rahasia sama sekali, yang terbaik adalah menjalankan semuanya melalui SSL, termasuk sumber daya. SSL juga satu-satunya cara untuk mengamankan lalu lintas HTTP; metode lain sama sekali tidak terstandarisasi dan dengan demikian tidak didukung secara luas, dan Anda sama sekali tidak ingin menerapkan hal-hal ini sendiri, karena jujur, itu terlalu mudah untuk salah paham.
TL; DR: Ya, SSL + Otentikasi Dasar adalah ide yang bagus, ya, Anda memerlukan server yang aman (dan sertifikat yang valid ), ya, itu akan memperlambat segalanya, tetapi tidak, ini bukan sesuatu yang perlu dikhawatirkan sekarang.
sumber
HTTPS (SSL) bukan FYI otentikasi pengguna. Itu hanya menyediakan enkripsi antara 2 titik akhir.
Tapi ya, ada sedikit overhead kecil dari itu (meskipun tidak cukup untuk menjamin perubahan rencana / perangkat keras). Lihat disini :
/programming/548029/how-much-overhead-does-ssl-impose
sumber
Dengan otentikasi dasar HTTP, nama pengguna dan kata sandi yang disediakan pengguna dikirim dengan setiap permintaan ke server. Ini berarti mereka ada dalam teks biasa bahkan di area situs Anda yang tidak perlu aman. Jelas, Anda ingin SSL di sini untuk menjaga keamanan pengguna Anda.
Secara teori, Anda dapat menggunakan otentikasi cookie dan hanya menempatkan SSL pada halaman login (tempat nama pengguna dan kata sandi dikirim). Jika cookie Anda cukup aman dan aman terhadap serangan replay, maka penyerang tidak akan bisa melakukan apa pun dengan mereka bahkan jika mereka berhasil mendapatkannya.
sumber
Otentikasi dasar adalah menetapkan nama pengguna dan kata sandi di header permintaan http. Jika Anda tidak menggunakan SSL atau yang setara maka nama pengguna dan kata sandi itu dikirim dalam teks biasa dan sepele bagi siapa pun untuk mencuri.
Sebagian besar server web mendukung HTTPS di luar kotak saat ini dan meskipun hal itu menambah biaya tambahan untuk setiap panggilan, biaya tetap minimal.
Anda bisa mengamankan beberapa titik akhir dan bukan yang lain (yaitu memiliki titik akhir autentikasi yang menghasilkan token yang dapat digunakan untuk panggilan lain). Saya akan sangat menyarankan SSL untuk seluruh layanan karena ini jauh lebih aman. (jika tidak ada yang lain itu menghentikan data sensitif dicegat)
sumber
Jeff Atwood menulis posting blog singkat belum lama ini tentang apakah enkripsi penuh adalah cara untuk pergi. Dia menggambarkan beberapa contoh dunia nyata dan memiliki beberapa garis pertimbangan kinerja juga.
Selain itu, ia mereferensikan artikel ini tentang studi kasus Gmail, mengutip yang berikut:
Dia juga menyebutkan beberapa peningkatan terbaru terhadap caching halaman sisi klien melalui HTTPS oleh browser .
Meskipun demikian, ia menunjukkan, ada hukuman lain, kebanyakan dari mereka bukan kinerja tetapi biaya implementasi:
sumber
Autentikasi dasar HTTP tanpa penanganan sesi Anda sendiri mungkin akan membuat Anda terbuka untuk serangan pemalsuan permintaan Situs silang. Anda mungkin dapat menggunakannya jika Anda pasangan dengan penanganan sesi Anda sendiri, tetapi Anda mungkin mengalami kesulitan menyediakan fungsi "logout" yang bersih.
Apa pun yang Anda gunakan untuk otentikasi, Anda harus menggunakan HTTPS untuk mengenkripsi koneksi (kecuali jika aplikasi web hanya diakses pada jaringan yang terkontrol dan aman). Ini mungkin memperlambat sedikit ( pengaturan koneksi mahal, tetapi browser cenderung menjaga koneksi untuk sementara waktu), tetapi jika Anda menginginkan aplikasi yang aman, Anda tidak akan dapat menghindarinya, jadi Anda tidak benar-benar perlu khawatir tentang hal itu.
Catatan: "Otentikasi HTTPS" (yang Anda sebutkan dalam judul) menyesatkan - ini bisa merujuk ke otentikasi sertifikat klien SSL, yang tidak ada hubungannya dengan teks pertanyaan Anda dan memiliki serangkaian manfaat dan masalah. Anda mungkin tidak ingin menyentuhnya.
sumber
Bagaimana Anda akan mencapai otentikasi dasar?
Jika itu adalah nama pengguna / kata sandi yang sulit dikodekan dan Anda menggunakan fungsionalitas bawaan server web Anda untuk melakukannya, kemungkinan akan berdampak hampir nol. Jika Anda tidak melakukan hal-hal gila dalam database atau hal serupa, maka ya mungkin ada dampaknya.
Seperti yang telah dicatat orang lain di sini, SSL & mengirim tajuk tambahan secara teknis akan membuat segalanya lebih lambat tetapi tidak akan signifikan dalam hal apa pun.
sumber