Sebenarnya Apa Sih JWT Itu?
Ketika web dijalankan, maka segala aktifitas terekam. Termasuk usernama dan password yang kamu masukkan.
Namun dibutuhkan pengamanan yang kuat agar segala data itu tidak hilang, dan tetap tersimpan dengan aman di dalam server
Awalnya teknologi Session menangani semua itu. Session akan bertugas untuk merekam data yang username dan password dalam web, sehingga ketika sewaktu waktu ada akun (username & passsword) yang masuk, data data itu takkan hilang. Mulai dari pesan masuk, jumlah absensi sekolahmu, biodatamu, dan lain sebagainya. Semua data itu bisa tetapa ada disana karena adanya Session yang disimpan dalam memory pada server
Namun akhir akhir ada teknologi yang menggantikannya, karena dirasa Session tak lagi aman. Bayangkan jika proses Session hanya semudah itu, berarti hanya dengan mengetahui sidik jari Session yang tersimpan, kita bisa menguasai data data yang kita anggap sebuah privasi. Apakah mau pesan masuk doi kita terbaca oleh orang asing? Tentu tidak
Maka dari itu lahirlah sebuah teknologi yang bernama JWT atau JSON Web Token
Apa Itu JWT (Json Web Token?)
Menurtu situs resminya:
"JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA or ECDSA."
Atau secara singkat JWT adalah standard yang mengamankan pertukaran informasi berbentuk object JSON. Yang mana informasi tersebut bisa diverifikasi karena telah ditandai secara digital.
Kita telah mendapatkan kata kunci untuk memahami JWT ini. Verifikasi dan Ditandai atau dalam bahasa inggris dikenal
Verify dan Signed
Bagaimana JWT Bekerja?
Pertama. Semisal kita memasukkan username dan password. Maka Server akan memberikan kode JWT, ini merupakan proses yang disebut sebagai Sign, dan token JWT tersebut merupakan Signature. Kode JWT ini diberikan berdasarkan kode rahasia. para programmer biasanya menyebutnya sebagai SECRET_KEY yang disimpan pada file .env
Contoh SECRET_KEY. Biasanya saat kita takkan memasukkan file ini pada repo Github. Caranya kita tuliskan .env pada file gitignore |
Kedua. Setelah itu JWT akan memberikan JWT pada browser dan mengirimkan JWT sebagai header Request kepada Server
Ketiga. Server akan mem-verify JWT tersebut. Atau sederhananya, mencocokan Signature tersebut sehingga server bisa memastikan request ini merupakan request yang aman dan bukan berasal dari hacker
Keempat. Server memberikan response yang diminta oleh Client. Bisa berupa isi data json, data data yang harus dipopulasikan
Kelebihan JWT Dibandingkan Session Biasa
Ketika kita menggunakan Session. Setiap Client mengambil data dari server Bank, maka semua proses keluar masuk, merubah dan menghapus data akan berhasil karena Session pada server Bank menyimpan ID Session tersebut. Namun ketika Client mengakses server Retirement semua itu takkan berhasil karena server Retirement tidak menyimpan Session apapun.
Sedangkan jika kita menggunakan JWT kita bebas mengakses server manapun, bisa Bank bisa Retirement. Selama kedua server tersebut memiliki SECRET_KEY yang sama
Amankan SECRET_KEY-mu
Tunggu. Apakah kamu yakin, SECRET_KEY mu aman?
Dan apakah kamu sudah tahu, bahwa SECRET_KEY mu tidak boleh sampai bocor?
Untuk mengamankan SECRET_KEY mu. Maka kita membutuhkan SECRET_KEY yang serandom mungkin. Serandom randomnya. Tidak bisa ditebak oleh manusia manapun. Hanya kita dan Allah yang boleh mengetahuinya
Bagaimana caranya? Caranya adalah dengan mendapatkan kode random tersebut menggunakan module bernama crypto
Buka CLI kalian. Dan ketik node
Lalu ketik require('crypto').randomBytes(64).toString('hex')
Maka kita akan mendapatkan angka angka, karakter karakter aneh ini
Ini lah yang akan menjadi SECRET_KEY kita. Kita kopi dan masukkan kedalam .env
Comments
Post a Comment