Apa yang dimaksud dengan RESTful Authentication dan bagaimana cara kerjanya? Saya tidak dapat menemukan ikhtisar yang baik di Google. Satu-satunya pengertian saya adalah Anda melewatkan kunci sesi (remeberal) di URL, tetapi ini bisa sangat salah.
rest
authentication
restful-authentication
rest-security
Jim Keener
sumber
sumber
Jawaban:
Bagaimana menangani otentikasi dalam arsitektur RESTful Client-Server adalah masalah perdebatan.
Secara umum, ini dapat dicapai, dalam SOA melalui dunia HTTP melalui:
Anda harus beradaptasi, atau bahkan lebih baik mencampur teknik-teknik itu, agar sesuai dengan arsitektur perangkat lunak Anda.
Setiap skema otentikasi memiliki PRO dan Kontra sendiri, tergantung pada tujuan kebijakan keamanan dan arsitektur perangkat lunak Anda.
Autentikasi dasar HTTP melalui HTTPS
Solusi pertama ini, berdasarkan pada protokol HTTPS standar, digunakan oleh sebagian besar layanan web.
Sangat mudah untuk diimplementasikan, tersedia secara default di semua browser, tetapi memiliki beberapa kelemahan yang diketahui, seperti jendela otentikasi mengerikan yang ditampilkan pada Browser, yang akan bertahan (tidak ada fitur seperti LogOut di sini), beberapa konsumsi CPU tambahan sisi server, dan fakta bahwa nama pengguna dan kata sandi ditransmisikan (melalui HTTPS) ke Server (seharusnya lebih aman untuk membiarkan kata sandi tetap hanya di sisi klien, selama entri keyboard, dan disimpan sebagai hash aman di Server) .
Kami dapat menggunakan Otentikasi Digest , tetapi juga memerlukan HTTPS, karena rentan terhadap serangan MiM atau Putar Ulang , dan khusus untuk HTTP.
Sesi melalui Cookie
Sejujurnya, sesi yang dikelola di Server tidak benar-benar tanpa kewarganegaraan.
Satu kemungkinan bisa mempertahankan semua data dalam konten cookie. Dan, berdasarkan desain, cookie ditangani di sisi Server (Klien, pada kenyataannya, bahkan tidak mencoba untuk menafsirkan data cookie ini: cookie hanya dikembalikan ke server pada setiap permintaan berturut-turut). Tetapi data cookie ini adalah data status aplikasi, jadi klien harus mengelolanya, bukan server, di dunia Stateless murni.
Teknik cookie itu sendiri adalah HTTP-linked, jadi itu tidak benar-benar tenang, yang seharusnya protokol-independen, IMHO. Ini rentan terhadap serangan MiM atau Replay .
Diberikan melalui Token (OAuth2)
Alternatifnya adalah dengan meletakkan token di dalam header HTTP sehingga permintaan dikonfirmasi. Inilah yang dilakukan OAuth 2.0. Lihat RFC 6749 :
Singkatnya, ini sangat mirip dengan cookie dan menderita masalah yang sama: tidak stateless, bergantung pada detail transmisi HTTP, dan tunduk pada banyak kelemahan keamanan - termasuk MiM dan Replay - sehingga harus digunakan hanya melalui HTTPS. Biasanya, JWT digunakan sebagai token.
Otentikasi Permintaan
Otentikasi kueri terdiri atas penandatanganan setiap permintaan RESTful melalui beberapa parameter tambahan pada URI. Lihat artikel referensi ini .
Itu didefinisikan seperti itu dalam artikel ini:
Teknik ini mungkin lebih kompatibel dengan arsitektur Stateless, dan juga dapat diimplementasikan dengan manajemen sesi ringan (menggunakan sesi di-memori alih-alih kegigihan DB).
Misalnya, berikut ini adalah sampel URI generik dari tautan di atas:
harus ditransmisikan seperti itu:
String yang ditandatangani adalah
/object?apikey=Qwerty2010×tamp=1261496500
dan tanda tangannya adalah hash SHA256 dari string yang menggunakan komponen pribadi dari kunci API.Caching data sisi server selalu tersedia. Misalnya, dalam kerangka kerja kami, kami menyimpan tanggapan di tingkat SQL, bukan di tingkat URI. Jadi menambahkan parameter tambahan ini tidak merusak mekanisme cache.
Lihat artikel ini untuk beberapa detail tentang RESTful otentikasi dalam kerangka klien-server ORM / SOA / MVC kami, berdasarkan JSON dan REST. Karena kami mengizinkan komunikasi tidak hanya melalui HTTP / 1.1, tetapi juga memberi nama pipa atau pesan GDI (lokal), kami mencoba menerapkan pola otentikasi yang benar-benar tenang, dan tidak bergantung pada kekhususan HTTP (seperti header atau cookie).
Nanti Catatan : menambahkan tanda tangan di URI dapat dilihat sebagai praktik buruk (karena misalnya akan muncul di log server http) sehingga harus dimitigasi, misalnya dengan TTL yang tepat untuk menghindari replay. Tetapi jika log http Anda terganggu, Anda pasti akan memiliki masalah keamanan yang lebih besar.
Dalam praktiknya, Autentikasi Token MAC yang akan datang untuk OAuth 2.0 mungkin merupakan peningkatan besar sehubungan dengan skema saat ini "Diberikan oleh Token". Tapi ini masih dalam proses dan terkait dengan transmisi HTTP.
Kesimpulan
Layak untuk menyimpulkan bahwa REST tidak hanya berbasis HTTP, bahkan jika, dalam praktiknya, itu juga sebagian besar diimplementasikan melalui HTTP. REST dapat menggunakan lapisan komunikasi lainnya. Jadi otentikasi TENANG bukan hanya sinonim dari otentikasi HTTP, apa pun yang dijawab Google. Bahkan seharusnya tidak menggunakan mekanisme HTTP sama sekali tetapi harus diabstraksi dari lapisan komunikasi. Dan jika Anda menggunakan komunikasi HTTP, berkat inisiatif Let's Encrypt, tidak ada alasan untuk tidak menggunakan HTTPS yang tepat, yang diperlukan selain skema otentikasi apa pun.
sumber
Cookie
sebagai pengganti yang lebih baik,HTTP Basic Auth
Anda dapat melakukan otentikasi yang benar-benar tanpa kewarganegaraan dengan metode untuk mengakhiri otentikasi dan kemampuan untuk keluar. Contoh implementasi dapat menggunakan cookie yang disebutEmulated-HTTP-Basic-Auth
dengan nilai yang mirip dengan HTTP Basic Auth yang sebenarnya dan sebagai tambahan waktu kedaluwarsa. Logout kemudian dapat diterapkan dengan menghapus cookie itu. Saya kira setiap klien yang dapat mendukung HTTP Basic Auth juga dapat mendukung otentikasi cookie yang dilakukan dengan cara ini.Cookie
) dapat digunakan sebagai gantinya.Saya ragu apakah orang-orang dengan antusias meneriakkan "HTTP Authentication" pernah mencoba membuat aplikasi berbasis browser (alih-alih layanan web mesin-ke-mesin) dengan REST (jangan ada pelanggaran yang dimaksudkan - saya hanya berpikir mereka tidak pernah menghadapi komplikasi) .
Masalah yang saya temukan dengan menggunakan Otentikasi HTTP pada layanan RESTful yang menghasilkan halaman HTML untuk dilihat di browser adalah:
Artikel yang sangat mendalam yang membahas poin-poin ini ada di sini , tetapi ini menghasilkan banyak peretasan javascript khusus browser, solusi untuk penyelesaian masalah, dan lain-lain. Karena itu, ini juga tidak kompatibel dengan maju sehingga akan membutuhkan pemeliharaan konstan saat browser baru dirilis. Saya tidak menganggap desain yang bersih dan jernih, ditambah lagi saya merasa ini adalah pekerjaan ekstra dan sakit kepala hanya supaya saya dapat dengan antusias menunjukkan lencana-SISA saya kepada teman-teman saya.
Saya percaya cookie adalah solusinya. Tapi tunggu, kue itu jahat, bukan? Tidak, mereka tidak, cara cookie sering digunakan adalah kejahatan. Cookie itu sendiri hanya sepotong informasi sisi klien, sama seperti info otentikasi HTTP yang akan dilacak oleh browser saat Anda menjelajah. Dan informasi sisi klien ini dikirim ke server pada setiap permintaan, lagi-lagi sama seperti info Otentikasi HTTP. Secara konsep, satu-satunya perbedaan adalah bahwa konten dari bagian sisi klien ini dapat ditentukan oleh server sebagai bagian dari responsnya.
Dengan menjadikan sesi sebagai sumber yang tenang dengan hanya aturan berikut:
Satu-satunya perbedaan untuk Otentikasi HTTP, sekarang, adalah bahwa kunci otentikasi dihasilkan oleh server dan dikirim ke klien yang terus mengirimkannya kembali, alih-alih klien yang menghitungnya dari kredensial yang dimasukkan.
converter42 menambahkan bahwa ketika menggunakan https (yang seharusnya), cookie harus disetel dengan aman sehingga info otentikasi tidak pernah dikirim melalui koneksi yang tidak aman. Poin bagus, belum melihatnya sendiri.
Saya merasa bahwa ini adalah solusi yang cukup yang berfungsi dengan baik, tetapi saya harus mengakui bahwa saya tidak cukup ahli keamanan untuk mengidentifikasi lubang potensial dalam skema ini - yang saya tahu adalah bahwa ratusan aplikasi web non-TENANG menggunakan pada dasarnya sama protokol masuk ($ _SESSION dalam PHP, HttpSession di Java EE, dll.). Konten header cookie hanya digunakan untuk membahas sumber daya sisi-server, seperti bahasa terima yang dapat digunakan untuk mengakses sumber daya terjemahan, dan sebagainya. Saya merasa itu sama, tetapi mungkin orang lain tidak? Bagaimana menurutmu, kawan?
sumber
Sudah cukup dikatakan tentang topik ini oleh orang-orang baik di sini. Tapi ini 2 sen saya.
Ada 2 mode interaksi:
Mesin adalah penyebut umum, dinyatakan sebagai API REST, dan aktor / kliennya adalah manusia atau mesin.
Sekarang, dalam arsitektur yang benar-benar tenang, konsep kewarganegaraan menyiratkan bahwa semua status aplikasi yang relevan (artinya status sisi klien) harus disertakan dengan setiap permintaan. Yang relevan, ini berarti bahwa apa pun yang diperlukan oleh REST API untuk memproses permintaan dan melayani respons yang sesuai.
Ketika kami mempertimbangkan ini dalam konteks aplikasi manusia-ke-mesin, "berbasis browser" seperti yang ditunjukkan Skrebbel di atas, ini berarti bahwa aplikasi (web) yang berjalan di browser akan perlu mengirimkan statusnya dan informasi yang relevan dengan setiap permintaan itu membuat ke REST API back end.
Pertimbangkan ini: Anda memiliki aset data yang terpapar platform data / API REST. Mungkin Anda memiliki platform BI swalayan yang menangani semua kubus data. Tetapi Anda ingin pelanggan (manusia) Anda mengakses ini melalui (1) aplikasi web, (2) aplikasi seluler, dan (3) beberapa aplikasi pihak ketiga. Pada akhirnya, bahkan rantai MTM mengarah ke HTM - benar. Jadi pengguna manusia tetap berada di puncak rantai informasi.
Dalam 2 kasus pertama, Anda memiliki kasus untuk interaksi manusia-ke-mesin, informasi yang sebenarnya dikonsumsi oleh pengguna manusia. Dalam kasus terakhir, Anda memiliki program mesin yang mengonsumsi API REST.
Konsep otentikasi berlaku secara menyeluruh. Bagaimana Anda mendesain ini sehingga REST API Anda diakses dengan cara yang seragam dan aman? Cara saya melihat ini, ada 2 cara:
Cara-1:
Cara-2:
Jelas, dalam Cara-2, API REST akan membutuhkan cara untuk mengenali dan mempercayai token sebagai valid. Login API melakukan verifikasi auth, dan oleh karena itu "kunci pelayan" perlu dipercaya oleh API REST lain dalam katalog Anda.
Ini, tentu saja, berarti bahwa kunci / token kunci perlu disimpan dan dibagikan di antara API REST. Repositori token yang dipercaya dan dibagikan ini dapat bersifat lokal / gabungan apa pun, yang memungkinkan REST API dari organisasi lain saling percaya.
Tapi saya ngelantur.
Intinya adalah, "keadaan" (tentang status terotentikasi klien) perlu dipertahankan dan dibagikan sehingga semua REST API dapat membuat lingkaran kepercayaan. Jika kita tidak melakukan ini, yang merupakan Cara-1, kita harus menerima bahwa tindakan otentikasi harus dilakukan untuk setiap / semua permintaan yang masuk.
Melakukan otentikasi adalah proses sumber daya intensif. Bayangkan mengeksekusi query SQL, untuk setiap permintaan yang masuk, terhadap toko pengguna Anda untuk memeriksa kecocokan uid / pwd. Atau, untuk mengenkripsi dan melakukan hash cocok (gaya AWS). Dan secara arsitektur, setiap API REST perlu melakukan ini, saya kira, menggunakan layanan login back-end yang umum. Karena, jika tidak, maka Anda membuang kode auth di mana-mana. Kekacauan besar.
Jadi lebih banyak lapisan, lebih banyak latensi.
Sekarang, ambil Way-1 dan terapkan ke HTM. Apakah pengguna (manusia) Anda benar-benar peduli jika Anda harus mengirim uid / pwd / hash atau apa pun dengan setiap permintaan? Tidak, selama Anda tidak mengganggunya dengan melemparkan halaman auth / login setiap detik. Semoga beruntung memiliki pelanggan jika Anda melakukannya. Jadi, yang akan Anda lakukan adalah menyimpan informasi login di suatu tempat di sisi klien, di browser, tepat di awal, dan mengirimkannya dengan setiap permintaan dibuat. Untuk pengguna (manusia), ia sudah masuk, dan "sesi" tersedia. Namun dalam kenyataannya, dia diautentikasi pada setiap permintaan.
Sama dengan Way-2. Pengguna (manusia) Anda tidak akan pernah melihat. Jadi tidak ada salahnya dilakukan.
Bagaimana jika kita menerapkan Way-1 ke MTM? Dalam hal ini, karena ini adalah mesin, kita dapat membuat orang ini bosan dengan memintanya mengirimkan informasi otentikasi dengan setiap permintaan. Tidak ada yang peduli! Performing Way-2 pada MTM tidak akan menimbulkan reaksi khusus; itu mesin sialan. Itu tidak peduli!
Jadi sungguh, pertanyaannya adalah apa yang sesuai dengan kebutuhan Anda. Kewarganegaraan memiliki harga yang harus dibayar. Bayar harganya dan lanjutkan. Jika Anda ingin menjadi seorang purist, maka bayar harganya juga, dan lanjutkan.
Pada akhirnya, filosofi tidak penting. Yang benar-benar penting adalah penemuan informasi, presentasi, dan pengalaman konsumsi. Jika orang menyukai API Anda, Anda melakukan pekerjaan Anda.
sumber
Way-3
, pendekatan hibrida. Klien masuk seperti padaWay-2
tetapi, seperti padaWay-1
, kredensial tidak diperiksa terhadap keadaan sisi server. Apapun, token autentik dibuat dan dikirim kembali ke klien seperti padaWay-2
. Token ini kemudian diperiksa keasliannya menggunakan kripto asimetris tanpa melihat status spesifik klien.Berikut ini adalah solusi otentikasi yang benar-benar dan sepenuhnya TENANG:
Ketika klien mengautentikasi:
3.1. mengeluarkan token yang berisi yang berikut ini:
3.2. Enkripsi token dengan kunci pribadi.
3.3. Kirim token terenkripsi kembali ke pengguna.
Ketika pengguna mengakses API apa pun, mereka juga harus memberikan token autentikasi.
Ini adalah stateless / RESTful authentication.
Perhatikan, bahwa jika hash kata sandi dimasukkan, pengguna juga akan mengirim kata sandi yang tidak dienkripsi bersama dengan token otentikasi. Server dapat memverifikasi bahwa kata sandi cocok dengan kata sandi yang digunakan untuk membuat token otentikasi dengan membandingkan hash. Koneksi aman menggunakan sesuatu seperti HTTPS akan diperlukan. Javascript di sisi klien dapat menangani mendapatkan kata sandi pengguna dan menyimpannya di sisi klien, baik dalam memori atau cookie, mungkin dienkripsi dengan kunci publik server .
sumber
Jujur dengan Anda, saya telah melihat jawaban yang bagus di sini, tetapi sesuatu yang sedikit mengganggu saya adalah ketika seseorang akan mengambil seluruh konsep Stateless ke ekstrem di mana itu menjadi dogmatis. Ini mengingatkan saya pada penggemar Smalltalk lama yang hanya ingin merangkul OO murni dan jika ada sesuatu yang bukan objek, maka Anda salah melakukannya. Beri aku istirahat.
Pendekatan RESTful seharusnya membuat hidup Anda lebih mudah dan mengurangi biaya overhead dan sesi, cobalah untuk mengikutinya karena itu adalah hal yang bijak untuk dilakukan, tetapi begitu Anda mengikuti disiplin (disiplin / pedoman apa pun) hingga ke titik ekstrim di mana ia tidak lagi memberikan manfaat yang dimaksudkan, maka Anda salah melakukannya. Beberapa bahasa terbaik saat ini memiliki keduanya, pemrograman fungsional dan orientasi objek.
Jika cara termudah bagi Anda untuk menyelesaikan masalah Anda adalah dengan menyimpan kunci otentikasi dalam cookie dan mengirimkannya ke header HTTP, maka lakukan, jangan menyalahgunakannya. Ingat bahwa sesi itu buruk ketika menjadi berat dan besar, jika semua sesi Anda terdiri dari string pendek yang berisi kunci, lalu apa masalahnya?
Saya terbuka untuk menerima koreksi dalam komentar, tetapi saya hanya tidak melihat titik (sejauh ini) dalam membuat hidup kita sengsara untuk menghindari menyimpan kamus besar hash di server kami.
sumber
Pertama dan yang terpenting, layanan web yang tenang adalah NEGARA (atau dengan kata lain, SESSIONLESS). Oleh karena itu, layanan RESTful tidak memiliki dan tidak boleh memiliki konsep sesi atau cookie yang terlibat. Cara untuk melakukan otentikasi atau otorisasi dalam layanan RESTful adalah dengan menggunakan header HTTP Authorization seperti yang didefinisikan dalam spesifikasi HTTP RFC 2616. Setiap permintaan tunggal harus berisi tajuk Otorisasi HTTP, dan permintaan tersebut harus dikirim melalui koneksi HTTP (SSL). Ini adalah cara yang benar untuk melakukan otentikasi dan untuk memverifikasi otorisasi permintaan dalam layanan web HTTP RESTful. Saya telah mengimplementasikan layanan web RESTful untuk aplikasi Cisco PRIME Performance Manager di Cisco Systems. Dan sebagai bagian dari layanan web itu, saya telah menerapkan otentikasi / otorisasi juga.
sumber
Ini tentu saja bukan tentang "kunci sesi" karena umumnya digunakan untuk merujuk ke otentikasi tanpa sesi yang dilakukan dalam semua kendala REST. Setiap permintaan menggambarkan sendiri, membawa informasi yang cukup untuk mengotorisasi permintaan sendiri tanpa keadaan aplikasi sisi server.
Cara termudah untuk mendekati ini adalah dengan memulai dengan mekanisme otentikasi bawaan HTTP di RFC 2617 .
sumber
Artikel 'sangat berwawasan' yang disebutkan oleh @skrebel ( http://www.berenddeboer.net/rest/authentication.html ) membahas metode otentikasi yang berbelit-belit tetapi benar-benar rusak.
Anda dapat mencoba mengunjungi halaman (yang seharusnya hanya dapat dilihat oleh pengguna yang diautentikasi) http://www.berenddeboer.net/rest/site/authenticated.html tanpa kredensial login.
(Maaf saya tidak bisa mengomentari jawabannya.)
Saya akan mengatakan REST dan otentikasi hanya tidak tercampur. REST berarti tanpa kewarganegaraan tetapi 'disahkan' adalah suatu keadaan. Anda tidak dapat memiliki keduanya di lapisan yang sama. Jika Anda seorang advokat yang tenang dan tidak menyukai keadaan, maka Anda harus menggunakan HTTPS (yaitu meninggalkan masalah keamanan ke lapisan lain).
sumber
Saya pikir otentikasi tenang melibatkan pengalihan token otentikasi sebagai parameter dalam permintaan. Contohnya adalah penggunaan apikeys oleh api. Saya tidak percaya penggunaan cookie atau http auth memenuhi syarat.
sumber
Pembaruan pada 16-Feb-2019
Pendekatan yang disebutkan sebelumnya di bawah ini pada dasarnya adalah jenis hibah "Resource Owner Password Credential" dari OAuth2.0 . Ini adalah cara mudah untuk bangkit dan berlari. Namun, dengan pendekatan ini setiap aplikasi dalam organisasi akan berakhir dengan autentikasi dan mekanisme otorisasi sendiri. Pendekatan yang disarankan adalah jenis hibah "Kode Otorisasi". Selain itu, dalam jawaban saya sebelumnya di bawah ini saya merekomendasikan browser localStorage untuk menyimpan token auth. Namun, saya mulai percaya bahwa cookie adalah opsi yang tepat untuk tujuan ini. Saya telah merinci alasan saya, pendekatan implementasi jenis hibah kode otorisasi, pertimbangan keamanan dll. Dalam jawaban StackOverflow ini .
Saya pikir pendekatan berikut dapat digunakan untuk otentikasi layanan REST:
Dengan pendekatan ini, kami melakukan operasi pemuatan cache yang mahal dengan rincian hak akses khusus pengguna setiap 30 menit. Jadi jika akses dicabut atau akses baru diberikan, dibutuhkan 30 menit untuk mencerminkan atau logout diikuti oleh login.
sumber
Itulah cara melakukannya: Menggunakan OAuth 2.0 untuk Login .
Anda dapat menggunakan metode otentikasi lain selain Google selama mendukung OAuth.
sumber
Menggunakan infrastruktur kunci Publik di mana pendaftaran kunci melibatkan pengikatan yang tepat memastikan bahwa kunci publik terikat dengan individu yang ditugaskan dengan cara yang memastikan non-repudiation
Lihat http://en.wikipedia.org/wiki/Public_key_infrastructure . Jika Anda mengikuti standar PKI yang tepat, orang atau agen yang menggunakan kunci curian secara tidak tepat dapat diidentifikasi dan dikunci. Jika agen diminta untuk menggunakan sertifikat, ikatan menjadi sangat ketat. Seorang pencuri yang pintar dan bergerak cepat dapat melarikan diri, tetapi mereka meninggalkan lebih banyak remah.
sumber
Untuk menjawab pertanyaan ini dari pemahaman saya ...
Sistem otentikasi yang menggunakan REST sehingga Anda tidak perlu melacak atau mengelola pengguna di sistem Anda. Ini dilakukan dengan menggunakan metode HTTP POST, GET, PUT, DELETE. Kami menggunakan 4 metode ini dan menganggapnya dalam hal interaksi basis data sebagai CREATE, READ, UPDATE, DELETE (tetapi di web kami menggunakan POST dan GET karena itulah yang didukung tag anchor tag saat ini). Jadi memperlakukan POST dan GET sebagai CREATE / READ / UPDATE / DELETE (CRUD) kami maka kami dapat merancang rute dalam aplikasi web kami yang akan dapat menyimpulkan tindakan CRUD apa yang kami capai.
Misalnya, dalam aplikasi Ruby on Rails kita dapat membangun aplikasi web kita sehingga jika pengguna yang masuk mengunjungi http://store.com/account/logout maka GET dari halaman tersebut dapat dilihat sebagai pengguna yang mencoba untuk keluar. . Di pengontrol rel kami, kami akan membuat aksi dalam log pengguna keluar dan mengirimkannya kembali ke halaman rumah.
GET pada halaman login akan menghasilkan formulir. POST pada halaman login akan dilihat sebagai upaya login dan mengambil data POST dan menggunakannya untuk login.
Bagi saya, ini adalah praktik menggunakan metode HTTP yang dipetakan ke makna basis datanya dan kemudian membangun sistem otentikasi dengan itu dalam pikiran Anda tidak perlu melewati id sesi atau sesi trek apa pun.
Saya masih belajar - jika Anda menemukan sesuatu yang saya katakan salah, tolong perbaiki saya, dan jika Anda mempelajari lebih lanjut, kembalikan di sini. Terima kasih.
sumber
Kiat yang valid untuk mengamankan aplikasi web apa pun
Jika Anda ingin mengamankan aplikasi Anda, maka Anda harus memulai dengan menggunakan HTTPS alih-alih HTTP , ini memastikan terciptanya saluran aman antara Anda & pengguna yang akan mencegah mengendusnya data yang dikirim kembali & keluar kepada pengguna & akan membantu menjaga data ditukar rahasia.
Anda dapat menggunakan JWT (JSON Web Tokens) untuk mengamankan API RESTful , ini memiliki banyak manfaat jika dibandingkan dengan sesi sisi server, manfaatnya terutama:
1- Lebih scalable, karena server API Anda tidak harus mengelola sesi untuk setiap pengguna (yang bisa menjadi beban besar ketika Anda memiliki banyak sesi)
2 - JWT mandiri & memiliki klaim yang menentukan peran pengguna misalnya & apa yang dapat dia akses & dikeluarkan pada tanggal & tanggal kedaluwarsa (setelah itu JWT tidak akan valid)
3 - Lebih mudah untuk menangani lintas-penyeimbang & jika Anda memiliki beberapa server API karena Anda tidak perlu berbagi data sesi atau mengkonfigurasi server untuk merutekan sesi ke server yang sama, setiap kali permintaan dengan JWT mengenai server mana pun, itu dapat diautentikasi & resmi
4- Lebih sedikit tekanan pada DB Anda dan Anda tidak perlu terus-menerus menyimpan & mengambil id sesi & data untuk setiap permintaan
5- JWT tidak dapat dirusak jika Anda menggunakan kunci yang kuat untuk menandatangani JWT, sehingga Anda dapat mempercayai klaim dalam JWT yang dikirim dengan permintaan tanpa harus memeriksa sesi pengguna & apakah dia berwenang atau tidak , Anda cukup memeriksa JWT & kemudian Anda siap untuk mengetahui siapa & apa yang dapat dilakukan pengguna ini.
Banyak perpustakaan menyediakan cara mudah untuk membuat & memvalidasi JWT di sebagian besar bahasa pemrograman, misalnya: di node.js salah satu yang paling populer adalah jsonwebtoken
Karena REST API umumnya bertujuan untuk menjaga agar server tidak memiliki kewarganegaraan, maka JWT lebih kompatibel dengan konsep itu karena setiap permintaan dikirim dengan token Otorisasi yang mandiri (JWT) tanpa server harus melacak sesi pengguna dibandingkan dengan sesi yang membuat server stateful sehingga ia mengingat pengguna & perannya, namun, sesi juga banyak digunakan & memiliki pro mereka, yang dapat Anda cari jika Anda mau.
Satu hal penting yang perlu diperhatikan adalah Anda harus mengirimkan JWT dengan aman ke klien menggunakan HTTPS & menyimpannya di tempat yang aman (misalnya di penyimpanan lokal).
Anda dapat mempelajari lebih lanjut tentang JWT dari tautan ini
sumber