Praktik Terbaik untuk mengamankan API REST / layanan web [ditutup]

828

Ketika merancang API atau layanan REST, adakah praktik terbaik yang ditetapkan untuk menangani keamanan (Otentikasi, Otorisasi, Manajemen Identitas)?

Saat membangun SOAP API Anda memiliki WS-Security sebagai panduan dan banyak literatur tentang topik tersebut. Saya telah menemukan sedikit informasi tentang mengamankan titik akhir REST.

Sementara saya mengerti REST sengaja tidak memiliki spesifikasi analog dengan WS- * Saya berharap praktik terbaik atau pola yang direkomendasikan telah muncul.

Setiap diskusi atau tautan ke dokumen yang relevan akan sangat dihargai. Jika itu penting, kami akan menggunakan WCF dengan pesan serial POX / JSON untuk REST API kami / Layanan yang dibangun menggunakan v3.5 dari .NET Framework.

Nathan
sumber
1
apakah Anda tahu aplikasi nyata lengkap menggunakan pola dan praktik yang baik dengan REST API dan layanan web di github?
PreguntonCojoneroCabrón

Jawaban:

298

Seperti yang dikatakan tweakt, Amazon S3 adalah model yang bagus untuk digunakan. Tanda tangan permintaan mereka memang memiliki beberapa fitur (seperti memasukkan stempel waktu) yang membantu melindungi terhadap permintaan ulangan yang tidak disengaja dan jahat.

Yang menyenangkan tentang HTTP Basic adalah bahwa hampir semua perpustakaan HTTP mendukungnya. Anda tentu saja perlu meminta SSL dalam hal ini karena mengirim kata sandi plaintext melalui internet hampir secara universal merupakan hal yang buruk. Basic lebih disukai daripada Digest ketika menggunakan SSL karena meskipun penelepon sudah tahu bahwa kredensial diperlukan, Digest memerlukan bolak-balik tambahan untuk menukar nilai nonce. Dengan Basic, penelepon hanya mengirim kredensial pertama kalinya.

Setelah identitas klien ditetapkan, otorisasi benar-benar hanya masalah implementasi. Namun, Anda dapat mendelegasikan otorisasi ke beberapa komponen lain dengan model otorisasi yang ada. Lagi-lagi hal yang menyenangkan tentang Basic di sini adalah server Anda berakhir dengan salinan plaintext dari kata sandi klien yang dapat Anda kirimkan ke komponen lain dalam infrastruktur Anda sesuai kebutuhan.

Greg Hewgill
sumber
3
SSL adalah bagian penting dari keamanan, tetapi tidak semua aplikasi memerlukan tingkat enkripsi itu. Jika seseorang mencuri dalam perjalanan apa yang akan Anda poskan secara publik di Twitter, apakah itu kelemahan yang signifikan? Untuk sebagian besar enkripsi SSL API akan lebih disukai. Persyaratan infrastruktur SSL agak lebih tinggi daripada dengan plaintext dan tidak ada server caching perantara (baca di sini tepi) yang dapat berpartisipasi dalam caching konten yang berulang kali diakses. Hati-hati, skalabilitas Anda mungkin menurun jika Anda benar-benar membutuhkan enkripsi yang ditawarkan.
Norman H
36
@NormanH: Argumen Anda tidak masuk akal, karena jika seseorang dapat melihat seluruh transaksi yang saya gunakan untuk mengirim ke Twitter, maka mereka dapat menyamar sebagai saya dan memposting pesan mereka sendiri di bawah nama saya.
Greg Hewgill
3
Mengutip dari wikipedia pada otentikasi Digest, "Otentikasi akses pencernaan adalah salah satu metode yang disetujui server web dapat digunakan untuk menegosiasikan kredensial dengan browser web pengguna. Ini menerapkan fungsi hash ke kata sandi sebelum mengirimnya melalui jaringan, yang merupakan lebih aman daripada otentikasi akses dasar, yang mengirim plaintext. " yang akan menjadi salah satu cara standar untuk mencapai apa yang saya singgung di atas. (Lihat en.wikipedia.org/wiki/Digest_access_authentication untuk perinciannya)
Norman H
5
"sending plaintext passwords over the net is almost universally a bad thing"- Bisakah Anda menguraikan "hampir"? Kapan itu bukan ide yang buruk?
toniedzwiedz
2
@GregHewgill bahkan di jaringan pribadi, saya tidak ingin pengguna saya dapat memotong kata sandi satu sama lain. Satu-satunya situasi yang dapat saya pikirkan, di mana tidak apa-apa untuk mengirim kata sandi melalui jaringan adalah ketika pengguna sendirian di jaringan. Fakta bahwa hal-hal seperti itu terjadi di tempat lain bukanlah alasan untuk mengizinkannya.
toniedzwiedz
115

Tidak ada standar untuk REST selain HTTP. Ada layanan REST didirikan di luar sana. Saya sarankan Anda mengintip mereka dan merasakan bagaimana mereka bekerja.

Misalnya, kami meminjam banyak ide dari layanan S3 REST Amazon ketika mengembangkan ide kami sendiri. Tetapi kami memilih untuk tidak menggunakan model keamanan yang lebih maju berdasarkan tanda tangan permintaan. Pendekatan yang lebih sederhana adalah HTTP Basic auth over SSL. Anda harus memutuskan mana yang paling cocok untuk situasi Anda.

Juga, saya sangat merekomendasikan buku RESTful Web Services dari O'reilly. Ini menjelaskan konsep inti dan menyediakan beberapa praktik terbaik. Anda umumnya dapat mengambil model yang mereka berikan dan memetakannya ke aplikasi Anda sendiri.

Mark Renouf
sumber
6
RESTful Web Services jelas merupakan buku yang hebat. A harus membaca di area ini. Benar-benar menginspirasi.
EdgarVerona
6
Bagaimana bisa @aehlke menerima begitu banyak upvotes untuk komentar tersebut mengingat (1) tidak ada yang namanya spesifikasi REST dan (2) Disertasi Fielding pada Gaya Arsitektur dan Desain Arsitektur Perangkat Lunak Berbasis Jaringan secara eksplisit menyebutkan REST dan HTTP dalam 6.3: REST Diterapkan ke HTTP.
20
HTTP bukan persyaratan untuk REST.
nategood
1
Buku RESTful Web Services tersedia secara gratis dari situs web mereka: crummy.com/writing/RESTful-Web-Services
icc97
Saya berencana untuk membaca buku itu dan kemudian saya menyadari bahwa ini terutama ditujukan untuk format XML. Haruskah saya menggunakan buku ini mengingat popularitas JSON? Atau tidak tergantung pada Format Interchange Data. Butuh bimbingan.
Bhargav Jhaveri
72

Anda mungkin juga ingin melihat OAuth , protokol terbuka yang muncul untuk otorisasi berbasis token yang secara khusus menargetkan http http.

Ini sangat mirip dengan pendekatan yang diambil oleh flickr dan ingat susu "rest" apis (belum tentu contoh apis yang tenang, tetapi contoh yang baik dari pendekatan berbasis token).

John Spurlock
sumber
3
Tapi tampaknya oAuth 2-berkaki, yang saya pikir adalah apa yang dibutuhkan di sini, tidak tercakup (kurangnya info) sebanyak yang berkaki 3.
redben
4
OAuth adalah tentang pendelegasian otorisasi yaitu saya pemilik informasi / akun membiarkan layanan A berinteraksi dengan data saya di layanan B (misalnya saya membiarkan Twitter menulis di facebook saya). Ini bukan otorisasi dalam arti yang lebih luas yaitu tentang mengendalikan apa yang dapat dilakukan pengguna pada sumber daya (data, informasi, layanan ...). Di sinilah XACML melangkah. XACML memungkinkan Anda menentukan kebijakan otorisasi tentang siapa yang dapat melakukan apa.
David Brossard
60

Ada daftar periksa hebat yang ditemukan di Github :

Autentikasi

  • Jangan menemukan kembali roda dalam Otentikasi, pembuatan token, penyimpanan kata sandi. Gunakan standar.

  • Gunakan Max Retrydan fitur penjara di Login.

  • Gunakan enkripsi pada semua data sensitif.

JWT (Token Web JSON)

  • Gunakan kunci rumit yang acak (JWT Secret) untuk membuat brute memaksa token menjadi sangat keras.

  • Jangan mengekstrak algoritme dari payload. Paksa algoritma di backend (HS256 atau RS256).

  • Jadikan token kedaluwarsa ( TTL, RTTL) sesingkat mungkin.

  • Jangan menyimpan data sensitif dalam JWTpayload, itu dapat diterjemahkan dengan mudah.

OAuth

  • Selalu memvalidasi redirect_urisisi server untuk membolehkan hanya URL yang masuk daftar putih.

  • Selalu mencoba menukar kode dan bukan token (jangan izinkan response_type=token).

  • Gunakan parameter negara dengan hash acak untuk mencegah CSRFpada OAuthproses otentikasi.

  • Tetapkan ruang lingkup default, dan validasikan parameter ruang lingkup untuk setiap aplikasi.

Mengakses

  • Batasi permintaan (Throttling) untuk menghindari serangan DDoS / brute-force.

  • Gunakan HTTPS di sisi server untuk menghindari MITM (Man In The Middle Attack)

  • Gunakan HSTSheader dengan SSL untuk menghindari serangan Strip SSL.

Memasukkan

  • Gunakan metode HTTP yang tepat sesuai dengan operasi: GET(baca), POST(buat), PUT/PATCH(ganti / perbarui), dan DELETE(untuk menghapus catatan), dan merespons dengan 405 Method Not Allowedjika metode yang diminta tidak sesuai untuk sumber daya yang diminta.

  • Validasi tipe konten pada Accepttajuk permintaan (Negosiasi Konten) untuk memungkinkan hanya format yang didukung (mis application/xml. application/json, Dll) dan merespons dengan 406 Not Acceptablerespons jika tidak cocok.

  • Validasi content-typedari diposting data saat Anda menerima (misalnya application/x-www-form-urlencoded, multipart/form-data, application/json, dll).

  • Validasi input pengguna untuk menghindari kerentanan umum (misalnya XSS, SQL-Injection, Eksekusi Kode Jarak Jauh, dll).

  • Jangan gunakan data sensitif (kredensial, Kata sandi, token keamanan, atau kunci API) di URL, tetapi gunakan Authorizationtajuk standar .

  • Gunakan layanan API Gateway untuk mengaktifkan caching, Rate Limitkebijakan (mis. Kuota, Spike Arrest, Concurrent Rate Limit) dan menggunakan sumber daya API secara dinamis.

Pengolahan

  • Periksa apakah semua titik akhir dilindungi di belakang otentikasi untuk menghindari proses otentikasi yang rusak.

  • ID sumber daya milik pengguna harus dihindari. Gunakan / me / orders sebagai ganti / user / 654321 / orders.

  • Jangan menambah ID secara otomatis. Gunakan UUID sebagai gantinya.

  • Jika Anda mem-parsing file XML, pastikan parsing entitas tidak diaktifkan untuk menghindari XXE (serangan entitas eksternal XML).

  • Jika Anda mem-parsing file XML, pastikan ekspansi entitas tidak diaktifkan untuk menghindari bom Billion Laughs / XML melalui serangan ekspansi entitas eksponensial.

  • Gunakan CDN untuk mengunggah file.

  • Jika Anda berurusan dengan data dalam jumlah besar, gunakan Pekerja dan Antrian untuk memproses sebanyak mungkin di latar belakang dan mengembalikan respons dengan cepat untuk menghindari Pemblokiran HTTP.

  • Jangan lupa untuk mematikan mode DEBUG .

Keluaran

  • Kirim X-Content-Type-Options: nosnifftajuk.

  • Kirim X-Frame-Options: denytajuk.

  • Kirim Content-Security-Policy: default-src 'none'tajuk.

  • Hapus sidik jari header - X-Powered-By, Server, X-AspNet-Versiondll

  • Paksa content-typerespons Anda, jika Anda kembali application/jsonmaka tipe konten respons Anda adalah application/json.

  • Jangan kembalikan data sensitif seperti kredensial, Kata sandi, token keamanan.

  • Kembalikan kode status yang tepat sesuai dengan operasi yang diselesaikan. (misalnya 200 OK, 400 Bad Request, 401 Unauthorized, 405 Method Not Allowed, dll).

Andrejs
sumber
1
Daftar yang bagus, meskipun sedikit dikemukakan - dan ini dimulai dengan omong kosong: "Jangan gunakan Auth Dasar Gunakan otentikasi standar (misalnya JWT, OAuth)." Anda tidak bisa mendapatkan lebih banyak standar-y daripada Basic Auth, dan ini memiliki tempatnya, terutama untuk API di mana klien bukan browser (untuk browser JWT biasanya lebih cocok). OAuth di sisi lain menggunakan serangkaian kompromi lain untuk otentikasi dan tidak benar-benar sebanding dengan Auth Dasar dan JWT.
johndodo
Anda benar, BasicAuth dengan HTTPS adalah hal biasa, tetapi sangat diperdebatkan - security.stackexchange.com/questions/988/… . Saya akan menghapus titik ini pula.
Andrejs
43

Saya agak terkejut SSL dengan sertifikat klien belum disebutkan. Memang, pendekatan ini hanya sangat berguna jika Anda dapat mengandalkan komunitas pengguna yang diidentifikasi oleh sertifikat. Tetapi sejumlah pemerintah / perusahaan memang mengeluarkannya kepada penggunanya. Pengguna tidak perlu khawatir tentang membuat kombinasi nama pengguna / kata sandi lagi, dan identitas dibuat pada setiap koneksi sehingga komunikasi dengan server dapat sepenuhnya tanpa kewarganegaraan, tidak ada sesi pengguna yang diperlukan. (Tidak menyiratkan bahwa salah satu / semua solusi lain yang disebutkan membutuhkan sesi)

stinkymatt
sumber
Kami sebenarnya menggunakan ini untuk beberapa integrasi serta terowongan vpn terenkripsi untuk mendukung sistem lama yang tidak kami kontrol yang tidak dapat berkomunikasi melalui https.
Casey
Sertifikat klien dapat membuat masalah saat Anda perlu load balancing ... itu bisa dilakukan, tetapi itu tidak mudah.
Jeremy Logan
2
@fiXedd - Kebalikannya adalah pengalaman saya dengan sertifikat klien karena mereka benar-benar tanpa kewarganegaraan. Koneksi terautentikasi klien dapat dapat diimbangi dengan penyeimbang beban bisu tanpa memperhatikan lengket koneksi karena mereka memerlukan kondisi berbagi nol mutlak antara klien dan server.
stinkymatt
4
Oh, Anda bisa melakukannya .... Anda bisa meminta load balancer meneruskan traffic TCP, tetapi Anda tidak bisa, misalnya, memiliki load balancer menjadi titik terminasi untuk SSL.
Jeremy Logan
Apakah masih aman jika sertifikat klien dan otoritas root ditandatangani sendiri? Otoritas root akan diimpor ke otoritas sertifikat root terpercaya klien.
Joyce
38

Setiap orang dalam jawaban ini telah mengabaikan kontrol / otorisasi akses yang sebenarnya.

Jika misalnya API REST / layanan web Anda tentang POST / MENDAPATKAN catatan medis, Anda mungkin ingin menetapkan kebijakan kontrol akses tentang siapa yang dapat mengakses data dan dalam keadaan apa. Contohnya:

  • dokter dapat MENDAPATKAN catatan medis pasien yang memiliki hubungan asuhan dengan mereka
  • tidak ada yang bisa POST data medis di luar jam praktik (misalnya 9 hingga 5)
  • pengguna akhir dapat MENDAPATKAN rekam medis yang mereka miliki atau rekam medis pasien yang menjadi wali mereka
  • perawat dapat MEMPERBARUI catatan medis pasien yang memiliki unit yang sama dengan perawat.

Untuk mendefinisikan dan mengimplementasikan otorisasi berbutir halus itu, Anda perlu menggunakan bahasa kontrol akses berbasis atribut yang disebut XACML, Bahasa Markup Kontrol Akses eXtensible.

Standar lain di sini adalah sebagai berikut:

  • OAuth: id. federasi dan delegasi otorisasi misalnya membiarkan layanan bertindak atas nama saya di layanan lain (Facebook dapat memposting ke Twitter saya)
  • SAML: federasi identitas / SSO web. SAML sangat banyak tentang siapa pengguna.
  • Standar WS-Security / WS- *: ini fokus pada komunikasi antara layanan SOAP. Mereka khusus untuk format pesan tingkat aplikasi (SOAP) dan mereka berurusan dengan aspek olahpesan misalnya keandalan, keamanan, kerahasiaan, integritas, atomicity, peristiwa ... Tidak ada yang mencakup kontrol akses dan semua khusus untuk SOAP.

XACML adalah teknologi-agnostik. Ini dapat diterapkan ke aplikasi java, .NET, Python, Ruby ... layanan web, REST API, dan banyak lagi.

Berikut ini adalah sumber daya yang menarik:

David Brossard
sumber
2
Saya tidak mengerti mengapa Anda tidak bisa menerapkan sistem token yang akan mendapatkan pengguna dan izinnya yang pada dasarnya akan menjadi hal yang sama?
Stan
Anda dapat mengambil pendekatan berbasis token. Itu bekerja dengan baik juga, tetapi Anda masih membutuhkan logika yang menentukan izin yang didapat pengguna, dengan kata lain, izin untuk menyisipkan di dalam token. Itulah yang dapat membantu Anda mencapai XACML. Itu juga menghindari token mengasapi.
David Brossard
2
Sebagai komentar sampingan, apa yang kontribusi "9 to 5" bagi keamanan? Seolah penyerang hanya aktif di malam hari? Belum lagi implikasi penggunaan yang parah, seolah-olah dokter hanya bekerja "9 hingga 5".
Roland
Itu persyaratan umum dalam skenario perawatan kesehatan. Lihat HL7 misalnya. Ada juga skenario pecahan kaca kalau-kalau dokter perlu akses di luar jam. Adapun peretas, setelah semua taruhan dibatalkan
David Brossard
1
Beberapa rekan saya memang sedang menyelidiki itu. Terima kasih @implyg.
David Brossard
25

Saya telah menggunakan OAuth beberapa kali, dan juga menggunakan beberapa metode lain (BASIC / DIGEST). Saya sepenuh hati menyarankan OAuth. Tautan berikut adalah tutorial terbaik yang pernah saya lihat tentang penggunaan OAuth:

http://hueniverse.com/oauth/guide/

Rob Ottaway
sumber
Meskipun ini adalah jawaban yang sangat lama terkait dengan OAuth 1.0, perlu dicatat bahwa penulis tautan yang Anda kutip mengatakan ini tentang OAuth 2.0 : "Saya mencapai kesimpulan bahwa OAuth 2.0 adalah protokol yang buruk ... Jika dibandingkan dengan OAuth 1.0, spesifikasi 2.0 lebih kompleks, lebih sedikit interoperable, kurang bermanfaat, lebih tidak lengkap, dan yang paling penting, kurang aman. " . Agar jelas, komentar yang saya kutip dibuat beberapa tahun setelah Anda memposting jawaban Anda.
skomisa
17

Salah satu pos terbaik yang pernah saya temui mengenai Keamanan yang berkaitan dengan REST adalah pada 1 RainDrop . API MySpace menggunakan OAuth juga untuk keamanan dan Anda memiliki akses penuh ke saluran kustom mereka dalam kode RestChess, yang saya lakukan dengan banyak eksplorasi. Ini demo'd di Mix dan Anda dapat menemukan posting di sini .

degnome
sumber
Terima kasih atas tautannya (1 RainDrop) - diskusi keamanan yang sangat menarik karena berkaitan dengan SOAP v REST
Nathan
15

Terima kasih atas sarannya. Kami akhirnya menggunakan tajuk HTTP khusus untuk memberikan token identitas dari klien ke layanan, dalam persiapan untuk mengintegrasikan RESTful API kami dengan kerangka kerja Zermatt Identity yang akan datang dari Microsoft. Saya telah menjelaskan masalahnya di sini dan solusi kami di sini . Saya juga menerima saran tweakt dan membeli RESTful Web Services - buku yang sangat bagus jika Anda sedang membangun API RESTful dalam bentuk apa pun.

Nathan
sumber
1
Pendekatan ini kedengarannya mencurigakan bagi saya. Apa yang mencegah penyerang menggunakan token identitas untuk menyamar klien? HTTPS tidak melindungi URL atau header terakhir kali saya memeriksa ...
Gili
2
Hmmm ... tidak yakin Anda benar tentang itu. Saya percaya bahwa kecuali beberapa header yang diperlukan untuk memahami jenis enkripsi apa yang diperlukan, semua header lainnya dienkripsi.
Nathan
51
Itu salah. HTTPS melindungi SEMUANYA. Kelanjutannya: TCP handshake ... TLS handshake ... <ENCRYPTED> GET / foo 200 OK ... teardown </ENCRYPTED>.
Mark Renouf
1
Perhatikan bahwa Anda juga dapat meneruskan token sebagai cookie (bukan tajuk khusus). Ini berperilaku baik di browser karena menggunakan header HTTP dengan perilaku standar di sebagian besar toolkit dan aplikasi. Di sisi layanan, cookie tidak harus berhubungan dengan sesi, Anda dapat menggunakannya untuk mengkomunikasikan token yang Anda inginkan.
Bruce Alderson
11
Mesin Wayback adalah hal yang indah: deskripsi masalah dan solusi
cjc343
14

OWASP (Proyek Keamanan Aplikasi Web Terbuka) memiliki beberapa lembar contekan yang mencakup semua aspek pengembangan Aplikasi Web. Proyek ini adalah sumber informasi yang sangat berharga dan dapat diandalkan. Mengenai layanan REST Anda dapat memeriksa ini: https://www.owasp.org/index.php/REST_Security_Cheat_Sheet

WelsonJR
sumber
7

Saya akan merekomendasikan OAuth 2/3. Anda dapat menemukan informasi lebih lanjut di http://oauth.net/2/

Abhijit Gaikwad
sumber
8
Peduli untuk menjelaskan mengapa Anda merekomendasikan versi 2 ketika sebagian besar tetap tidak lengkap? IMHO, versi 1.0a tetap menjadi solusi yang solid untuk sebagian besar aplikasi.
Butifarra
6

Saya mencari banyak tentang keamanan yang tenang dan kami juga akhirnya menggunakan token via cookie dari klien ke server untuk mengotentikasi permintaan. Saya menggunakan keamanan pegas untuk otorisasi permintaan dalam layanan karena saya harus mengotentikasi dan mengesahkan setiap permintaan berdasarkan kebijakan keamanan tertentu yang telah ada dalam DB.

Parisa Kachoui
sumber
6

Fakta bahwa dunia SOAP cukup baik ditutupi dengan standar keamanan tidak berarti bahwa itu aman secara default. Pertama, standarnya sangat kompleks. Kompleksitas bukanlah teman keamanan yang sangat baik dan kerentanan implementasi seperti serangan pembungkus tanda tangan XML bersifat endemik di sini.

Adapun lingkungan NET saya tidak akan membantu banyak, tapi “layanan Building web dengan Java” (bata dengan ~ 10 penulis) memang membantu saya banyak dalam memahami WS- * arsitektur keamanan dan, terutama, kebiasaan.

kravietz
sumber
4

REST sendiri tidak menawarkan standar keamanan, tetapi hal-hal seperti OAuth dan SAML dengan cepat menjadi standar dalam ruang ini. Namun, otentikasi dan otorisasi hanyalah sebagian kecil dari apa yang perlu Anda pertimbangkan. Banyak kerentanan diketahui terkait dengan aplikasi web berlaku sangat banyak untuk REST apis. Anda harus mempertimbangkan validasi input, cracking sesi, pesan kesalahan yang tidak pantas, kerentanan karyawan internal dan sebagainya. Itu adalah subjek besar.

Robert Morschel
sumber
4

Saya ingin menambahkan (sejalan dengan stinkeymatt), solusi paling sederhana adalah menambahkan sertifikat SSL ke situs Anda. Dengan kata lain, pastikan url Anda adalah HTTPS: //. Itu akan mencakup keamanan transportasi Anda (bang for the buck). Dengan RESTful url, idenya adalah untuk membuatnya tetap sederhana (tidak seperti WS * security / SAML), Anda dapat menggunakan oAuth2 / openID connect atau bahkan Basic Auth (dalam kasus sederhana). Tetapi Anda masih membutuhkan SSL / HTTPS. Silakan periksa keamanan ASP.NET Web API 2 di sini: http://www.asp.net/web-api/overview/security (Artikel dan Video)

Manish Jain
sumber
3

Sebagai @Nathan berakhir dengan yang merupakan HTTP Header sederhana, dan beberapa mengatakan OAuth2 dan sertifikat SSL sisi klien. Intinya adalah ini ... API REST Anda tidak harus menangani keamanan karena itu harus benar-benar berada di luar cakupan API.

Sebaliknya lapisan keamanan harus diletakkan di atasnya, apakah itu HTTP Header di belakang proxy web (pendekatan umum seperti SiteMinder, Zermatt atau bahkan Apache HTTPd), atau serumit OAuth 2.

Kuncinya adalah permintaan harus berfungsi tanpa interaksi pengguna akhir. Yang diperlukan hanyalah memastikan bahwa koneksi ke REST API diautentikasi. Di Java EE kami memiliki gagasan tentang userPrincipalyang dapat diperoleh padaHttpServletRequest . Hal ini juga dikelola dalam deskriptor penyebaran bahwa pola URL dapat aman sehingga kode API REST tidak perlu memeriksa lagi.

Di dunia WCF, saya akan gunakan ServiceSecurityContext.Currentuntuk mendapatkan konteks keamanan saat ini. Anda perlu mengonfigurasi aplikasi Anda untuk meminta otentikasi.

Ada satu pengecualian untuk pernyataan yang saya miliki di atas dan itu adalah penggunaan nonce untuk mencegah replay (yang bisa berupa serangan atau seseorang hanya mengirimkan data yang sama dua kali). Bagian itu hanya dapat ditangani di lapisan aplikasi.

Archimedes Trajano
sumber
3

Untuk Keamanan Aplikasi Web, Anda harus melihat pada OWASP ( https://www.owasp.org/index.php/Main_Page ) yang menyediakan cheatsheet untuk berbagai serangan keamanan. Anda dapat memasukkan sebanyak mungkin tindakan untuk mengamankan Aplikasi Anda. Sehubungan dengan keamanan API (otorisasi, otentikasi, manajemen identitas), ada beberapa cara seperti yang telah disebutkan (Dasar, Intisari dan OAuth). Ada lubang lubang di OAuth1.0, sehingga Anda dapat menggunakan OAuth1.0a (OAuth2.0 tidak diadopsi secara luas karena masalah dengan spesifikasi)

java_geek
sumber
2

Sudah lama tetapi pertanyaannya masih relevan, meskipun jawabannya mungkin telah sedikit berubah.

API Gateway akan menjadi solusi yang fleksibel dan sangat dapat dikonfigurasi. Saya menguji dan menggunakan KONG sedikit dan sangat menyukai apa yang saya lihat. KONG menyediakan admin REST API miliknya sendiri yang dapat Anda gunakan untuk mengelola pengguna.

Express-gateway.io lebih baru dan juga merupakan Gateway API.

Matt Bannert
sumber