Bagaimana cara mengamankan layanan web RESTful?

88

Saya harus menerapkan layanan web RESTful yang aman . Saya sudah melakukan riset menggunakan Google tetapi saya tidak bisa.

Pilihan:

TLS (HTTPS) +

Apakah ada opsi lain yang mungkin untuk dipertimbangkan? Jika OAuth lalu versi apa? Apakah itu penting? Dari apa yang saya baca sejauh ini, OAuth 2.0 dengan token pembawa (tanpa tanda tangan) tampaknya tidak aman .

Saya telah menemukan artikel lain yang sangat menarik tentang otentikasi berbasis REST .

Amankan REST API Anda ... Dengan Cara yang Benar

Jan Deinhard
sumber

Jawaban:

59

Ada metode lain yang sangat aman. Ini sertifikat klien. Tahu bagaimana server menampilkan Sertifikat SSL ketika Anda menghubungi mereka di https? Server dapat meminta sertifikat dari klien sehingga mereka tahu klien tersebut sesuai dengan namanya. Klien menghasilkan sertifikat dan memberikannya kepada Anda melalui saluran aman (seperti masuk ke kantor Anda dengan kunci USB - sebaiknya kunci USB non-trojan).

Anda memuat kunci publik dari sertifikat klien sertifikat (dan sertifikat penandatangannya, jika perlu) ke server web Anda, dan server web tidak akan menerima koneksi dari siapa pun kecuali orang yang memiliki kunci pribadi yang sesuai untuk sertifikat itu tahu tentang. Ini berjalan di lapisan HTTPS, jadi Anda bahkan mungkin dapat sepenuhnya melewati autentikasi tingkat aplikasi seperti OAuth (bergantung pada kebutuhan Anda). Anda dapat mengabstraksi satu lapisan dan membuat Otoritas Sertifikat lokal dan menandatangani Permintaan Sertifikasi dari klien, memungkinkan Anda untuk melewati langkah-langkah 'buat mereka datang ke kantor' dan 'memuat sertifikat ke server'.

Sakit leher? Benar. Baik untuk semuanya? Nggak. Sangat aman? Ya.

Itu bergantung pada klien yang menjaga keamanan sertifikat mereka (mereka tidak dapat memposting kunci pribadi mereka secara online), dan biasanya digunakan saat Anda menjual layanan kepada klien daripada membiarkan siapa pun mendaftar dan terhubung.

Bagaimanapun, ini mungkin bukan solusi yang Anda cari (mungkin tidak jujur), tetapi ini adalah pilihan lain.

Tom Ritter
sumber
Oke, sekarang saya bingung mana yang lebih baik, pendekatan ini atau jawaban lain . Bisakah Anda menjelaskannya? : D
fikr4n
Jawaban Anda akan sempurna untuk para master tetapi membingungkan untuk pemula. Bisakah Anda memberikan beberapa informasi detail atau tautan untuk dibaca?
Rajan Rawal
Jika sertifikat ditandatangani sendiri, apakah masih "sangat aman"?
Joyce
@ Joyce saya tidak akan berpikir. Karena Anda tidak dipercaya (jangan tersinggung), sertifikat yang Anda tanda tangani (dengan sertifikat Anda sendiri) tidak dapat dipercaya. Saya yakin sertifikat yang ditandatangani sendiri lebih berguna untuk pengujian.
mbmast
Mengingat pengguna akhir (pelanggan) memiliki sertifikat klien yang kunci publiknya dibagikan dengan server, bukankah semua hal yang "sangat aman" akan berantakan jika mesin pelanggan diretas dan sertifikat klien mereka dicuri?
mbmast
18

HTTP Basic + HTTPS adalah salah satu metode umum.

pc1oad1etter
sumber
3
Saya tidak berpikir bahwa intisari http memberi Anda apa pun di atas http basic jika keduanya lebih dari https.
pc1oad1etter
3
Anda dipersilakan untuk menambahkan informasi bermanfaat tentang manfaat intisari HTTP tanpa nada, serius.
pc1oad1etter
9

Jika memilih di antara versi OAuth, gunakan OAuth 2.0.

Token pembawa OAuth sebaiknya hanya digunakan dengan pengangkutan aman.

Token pembawa OAuth hanya seaman atau seaman transportasi yang mengenkripsi percakapan. HTTPS menjaga perlindungan dari serangan replay, jadi token pembawa juga tidak perlu melindungi dari replay.

Meskipun benar bahwa jika seseorang mencegat token pembawa Anda, mereka dapat menyamar sebagai Anda saat memanggil API, ada banyak cara untuk mengurangi risiko tersebut. Jika Anda memberikan token Anda masa kedaluwarsa yang lama dan mengharapkan klien Anda untuk menyimpan token secara lokal, Anda memiliki risiko token yang lebih besar dicegat dan disalahgunakan daripada jika Anda memberikan token Anda waktu kedaluwarsa yang singkat, meminta klien untuk memperoleh token baru untuk setiap sesi, dan menyarankan klien untuk tidak menyimpan token.

Jika Anda perlu mengamankan payload yang melewati beberapa peserta, Anda memerlukan sesuatu yang lebih dari HTTPS / SSL, karena HTTPS / SSL hanya mengenkripsi satu tautan grafik. Ini bukan kesalahan OAuth.

Token pembawa mudah diperoleh klien, mudah digunakan klien untuk panggilan API, dan banyak digunakan (dengan HTTPS) untuk mengamankan API yang dapat diakses publik dari Google, Facebook, dan banyak layanan lainnya.

dthorpe.dll
sumber