Mari kita lupakan sejak awal:
JWT adalah pendekatan yang sangat modern, sederhana dan aman yang meluas untuk Json Web Tokens. Json Web Tokens adalah solusi tanpa kewarganegaraan untuk otentikasi. Jadi tidak perlu menyimpan status sesi apa pun di server, yang tentu saja sangat cocok untuk API yang tenang. API yang tenang harus selalu tanpa kewarganegaraan, dan alternatif yang paling banyak digunakan untuk otentikasi dengan JWT adalah dengan hanya menyimpan status masuk pengguna di server menggunakan sesi. Tapi tentu saja tidak mengikuti prinsip yang mengatakan bahwa API yang tenang harus tidak bernegara dan itu sebabnya solusi seperti JWT menjadi populer dan efektif.
Jadi sekarang mari kita tahu bagaimana sebenarnya otentikasi bekerja dengan Token Web Json. Dengan asumsi kita sudah memiliki pengguna terdaftar di database kami. Jadi klien pengguna mulai dengan membuat permintaan posting dengan nama pengguna dan kata sandi, aplikasi kemudian memeriksa apakah pengguna ada dan jika kata sandi itu benar, maka aplikasi akan menghasilkan Json Web Token unik hanya untuk pengguna itu.
Token dibuat menggunakan string rahasia yang disimpan di server . Selanjutnya, server kemudian mengirimkan JWT itu kembali ke klien yang akan menyimpannya di cookie atau di penyimpanan lokal.
Sama seperti ini, pengguna diautentikasi dan pada dasarnya masuk ke aplikasi kami tanpa meninggalkan keadaan apa pun di server.
Jadi server sebenarnya tidak tahu pengguna mana yang benar-benar masuk, tetapi tentu saja, pengguna tahu bahwa dia masuk karena dia memiliki Json Web Token yang valid yang agak seperti paspor untuk mengakses bagian aplikasi yang dilindungi.
Jadi sekali lagi, hanya untuk memastikan Anda mendapat ide. Seorang pengguna login segera setelah ia mendapatkan Json Web Token unik dan valid yang tidak disimpan di mana pun di server. Dan karenanya proses ini sepenuhnya tanpa kewarganegaraan.
Lalu, setiap kali pengguna ingin mengakses rute yang dilindungi seperti data profil penggunanya, misalnya. Dia mengirim Json Web Token bersama dengan permintaannya, jadi itu seperti menunjukkan paspornya untuk mendapatkan akses ke rute itu.
Setelah permintaan mengenai server, aplikasi kami kemudian akan memverifikasi apakah Json Web Token benar-benar valid dan jika pengguna benar-benar seperti yang dikatakannya, maka data yang diminta akan dikirim ke klien dan jika tidak, maka akan ada menjadi kesalahan saat memberi tahu pengguna bahwa ia tidak diizinkan mengakses sumber daya itu.
Semua komunikasi ini harus terjadi melalui https, Jadi amankan Http terenkripsi untuk mencegah siapa pun bisa mendapatkan akses ke kata sandi atau Token Web Json. Hanya dengan begitu kita memiliki sistem yang sangat aman.
Jadi Json Web Token tampak seperti bagian kiri dari tangkapan layar ini yang diambil dari JWT debugger di jwt.ioSo pada dasarnya, ini adalah string penyandian yang terdiri dari tiga bagian. Header, payload dan tanda tangan Sekarang header hanyalah beberapa metadata tentang token itu sendiri dan payload adalah data yang dapat kita enkode ke dalam token, data apa pun yang kita inginkan. Jadi semakin banyak data yang ingin kita enkode di sini, semakin besar JWT. Bagaimanapun, kedua bagian ini hanyalah teks biasa yang akan disandikan, tetapi tidak dienkripsi.
Jadi siapa pun akan dapat men-decode mereka dan membacanya , kami tidak dapat menyimpan data sensitif apa pun di sini. Tapi itu bukan masalah sama sekali karena di bagian ketiga, jadi di tanda tangan, adalah hal-hal yang benar-benar menarik. Tanda tangan dibuat menggunakan header, payload, dan rahasia yang disimpan di server.
Dan seluruh proses ini kemudian disebut menandatangani Json Web Token . Algoritma penandatanganan mengambil header, payload, dan rahasia untuk membuat tanda tangan yang unik. Jadi hanya data ini ditambah rahasia yang dapat membuat tanda tangan ini, oke? Kemudian bersama dengan tajuk dan payload, tanda tangan ini membentuk JWT, yang kemudian dikirim ke klien.
Setelah server menerima JWT untuk memberikan akses ke rute yang dilindungi, server perlu memverifikasinya untuk menentukan apakah pengguna benar-benar seperti yang ia klaim. Dengan kata lain, itu akan memverifikasi jika tidak ada yang mengubah header dan data payload token. Jadi sekali lagi, langkah verifikasi ini akan memeriksa apakah tidak ada pihak ketiga yang benar-benar mengubah header atau payload Json Web Token.
Jadi, bagaimana verifikasi ini bekerja? Yah, sebenarnya cukup mudah. Setelah JWT diterima, verifikasi akan mengambil tajuk dan muatannya, dan bersama dengan rahasia yang masih tersimpan di server, pada dasarnya membuat tanda tangan pengujian.
Tetapi tanda tangan asli yang dihasilkan ketika JWT pertama kali dibuat masih dalam token, kan? Dan itulah kunci verifikasi ini. Karena sekarang yang harus kita lakukan adalah membandingkan tanda tangan tes dengan tanda tangan asli. Dan jika tanda tangan pengujian sama dengan tanda tangan asli, maka itu berarti payload dan header belum dimodifikasi.
Karena jika mereka telah dimodifikasi, maka tanda tangan tes harus berbeda. Karenanya dalam kasus ini di mana tidak ada perubahan data, kami dapat mengotentikasi pengguna. Dan tentu saja, jika kedua tanda tangan itu sebenarnya berbeda, yah, itu berarti seseorang merusak data. Biasanya dengan mencoba mengubah payload. Tetapi pihak ketiga yang memanipulasi payload tentu saja tidak memiliki akses ke rahasia, sehingga mereka tidak dapat menandatangani JWT. Jadi tanda tangan asli tidak akan pernah sesuai dengan data yang dimanipulasi. Dan karenanya, verifikasi akan selalu gagal dalam kasus ini. Dan itulah kunci untuk membuat seluruh sistem ini bekerja. Ini keajaiban yang membuat JWT sangat sederhana, tetapi juga sangat kuat.
md5('original messaged' + secret) != md5('changed message' + secret)
jadi jika seseorang mengubah pesan Anda dapat mendeteksinya