Saya membaca beberapa posting tentang "JWT vs Cookie" tetapi itu hanya membuat saya semakin bingung ...
Saya ingin klarifikasi , ketika orang berbicara tentang "otentikasi berbasis token vs cookie", cookie di sini hanya merujuk ke cookie sesi ? Pemahaman saya adalah bahwa cookie itu seperti media , dapat digunakan untuk mengimplementasikan otentikasi berbasis token (menyimpan sesuatu yang dapat mengidentifikasi pengguna yang masuk di sisi klien ) atau otentikasi berbasis sesi (menyimpan konstanta di sisi klien yang cocok dengan informasi sesi di sisi server )
Mengapa kita membutuhkan token web JSON ? Saya menggunakan cookie standar untuk menerapkan otentikasi berbasis token ( tidak menggunakan id sesi, tidak menggunakan memori server atau penyimpanan file ) :,
Set-Cookie: user=innocent; preferred-color=azure
dan satu-satunya perbedaan yang saya amati adalah bahwa JWT berisi muatan dan tanda tangan ... sedangkan Anda dapat memilih antara cookie bertanda tangan atau teks biasa untuk header http. Menurut pendapat saya, cookie yang ditandatangani (cookie:'time=s%3A1464743488946.WvSJxbCspOG3aiGi4zCMMR9yBdvS%2B6Ob2f3OG6%2FYCJM'
) lebih hemat ruang, satu-satunya kelemahan adalah klien tidak dapat membaca token, hanya server yang bisa ... tetapi saya pikir tidak apa-apa karena seperti klaim di JWT bersifat opsional, tidak perlu token untuk menjadi bermakna
sumber
Gambaran
Apa yang Anda minta adalah perbedaan antara cookie dan token pembawa untuk mengirim Token Web JSON (JWT) dari klien ke server.
Cookie dan token pembawa mengirim data.
Satu perbedaan adalah cookie untuk mengirim dan menyimpan data arbitrer, sedangkan token pembawa khusus untuk mengirim data otorisasi.
Data tersebut sering kali dikodekan sebagai JWT.
Kue kering
Cookie adalah pasangan nama-nilai, yang disimpan di browser web, dan memiliki tanggal kedaluwarsa serta domain terkait.
Kami menyimpan cookie di browser web baik dengan JavaScript atau dengan header Respon HTTP.
Browser web secara otomatis mengirimkan cookie dengan setiap permintaan ke domain cookie.
Token Pembawa
Token pembawa adalah nilai yang masuk ke
Authorization
header Permintaan HTTP apa pun. Itu tidak disimpan secara otomatis di mana pun, tidak memiliki tanggal kedaluwarsa, dan tidak ada domain terkait. Itu hanya sebuah nilai. Kami menyimpan nilai tersebut secara manual di klien kami dan secara manual menambahkan nilai tersebut ke header HTTP Authorization.JWT dan Otentikasi Berbasis Token
Saat kami melakukan autentikasi berbasis token, seperti OpenID, OAuth, atau OpenID Connect, kami menerima access_token (dan terkadang id_token) dari otoritas tepercaya. Biasanya kami ingin menyimpannya dan mengirimkannya bersama dengan Permintaan HTTP untuk sumber daya yang dilindungi. Bagaimana kita melakukannya?
Opsi 1 adalah menyimpan token dalam cookie. Ini menangani penyimpanan dan juga secara otomatis mengirimkan token ke server di
Cookie
header setiap permintaan. Server kemudian mengurai cookie, memeriksa token, dan merespons sesuai.Opsi lainnya adalah menyimpan token di penyimpanan lokal / sesi, lalu mengatur
Authorization
header setiap permintaan secara manual . Dalam kasus ini, server membaca header dan melanjutkan seperti cookie.Ada baiknya membaca RFC yang ditautkan untuk mempelajari lebih lanjut.
sumber
Selain apa yang dikatakan MvdD tentang cookie yang dikirim secara otomatis:
Singkatnya: posting yang Anda baca mungkin membandingkan JWT sebagai token pembawa dengan cookie otentikasi untuk tujuan otentikasi browser ke server. Tetapi JWT dapat melakukan lebih banyak lagi, ia menghadirkan standardisasi dan fitur untuk digunakan di luar kasus penggunaan yang mungkin Anda pikirkan.
sumber
Meskipun cookie dapat meningkatkan risiko serangan CSRF karena dikirim secara otomatis bersama dengan permintaan, cookie dapat mengurangi risiko serangan XSS saat
HttpOnly
bendera disetel, karena skrip apa pun yang disuntikkan ke halaman tidak akan dapat membaca kue.CSRF: pengguna mengklik link (atau melihat gambar) di situs penyerang, yang menyebabkan browser mengirimkan permintaan ke situs korban. Jika korban menggunakan cookie, browser secara otomatis akan memasukkan cookie dalam permintaan, dan jika permintaan GET dapat menyebabkan tindakan non-read-only, situs korban rentan terhadap serangan tersebut.
XSS: penyerang menyematkan skrip di situs korban (situs korban hanya rentan jika masukan tidak dibersihkan dengan benar), dan skrip penyerang dapat melakukan apa pun yang diizinkan untuk dilakukan javascript di halaman. Jika Anda menyimpan token JWT di penyimpanan lokal, skrip penyerang dapat membaca token tersebut, dan juga mengirim token tersebut ke server yang mereka kontrol. Jika Anda menggunakan cookie dengan
HttpOnly
bendera, skrip penyerang tidak akan dapat membaca cookie Anda sejak awal. Meskipun demikian, skrip yang berhasil mereka masukkan akan tetap dapat melakukan apa pun yang dapat dilakukan javascript, jadi Anda masih menyemprot IMO (yaitu, meskipun mereka mungkin tidak dapat membaca cookie untuk mengirimkannya ke server mereka sendiri untuk digunakan nanti , mereka dapat mengirim permintaan ke situs vicitim menggunakan XHR, yang akan tetap menyertakan cookie).sumber
Ref - Kebutuhan Token Web JSON
Kue
Untuk cookie, setelah pengguna diautentikasi, maka Server Gmail akan membuat ID sesi unik. Sesuai dengan id sesi ini, ia akan menyimpan di memori semua informasi pengguna yang dibutuhkan oleh server Gmail untuk mengenali pengguna dan memungkinkannya melakukan operasi.Selain itu, untuk semua permintaan dan respons berikutnya, id sesi ini juga akan diteruskan. Jadi sekarang ketika server menerima permintaan itu akan memeriksa id sesi. Menggunakan id sesi ini akan memeriksa apakah ada informasi yang sesuai. Ini kemudian akan memungkinkan pengguna untuk mengakses sumber daya dan mengembalikan respons bersama dengan id sesi.
Kekurangan Cookies
JWT
sumber