Mengenal JWT dan contoh implementasinya
writer : Muhammad Satria Rajendra, Back-end Developer
JWT atau kepanjangan dari JSON Web Token merupakan merupakan token standar yang menggunakan JSON. Bentuk JWT adalah string panjang yang sangat acak. Umumnya JWT digunakan untuk mengirimkan verifikasi data yang dapat dilakukan oleh dua pihak atau lebih.
Bagaimana JWT bekerja?
Sama halnya seperti password, ketika pengguna sudah melakukan login maka server akan memberikan sebuah Token. Lalu Token tersebut akan disimpan pada Local Storage atau Cookies Browser di perangkat pengguna. dan apabila pengguna ingin mengakses halaman halaman tertentu maka harus menyertakan token tersebut. Maka dari itu, pengguna akan mengirimkan kembali token yang diberikan di awal sebagai bukti bahwa pengguna tersebut sudah melakukan login.
Struktur JWT
JWT terdiri dari 3 struktur baigan, yang pertama adalah header, lalu yang kedua disebut dengan bagian payload atau data dan yang ketiga adalah bagian verify signature.
- Header
Header adalah bagian pertama dari JSON Web Token (JWT), yang berisi informasi penting tentang jenis token itu sendiri. Header dienkode menggunakan Base64URL dan menjadi bagian dari string JWT yang lengkap. Contoh algoritma yang digunakan adalah HMAC SHA256 atau RSA.
Contoh header
{
"alg": "HS256",
"typ": "JWT"
}
- Payload
Payload adalah bagian kedua dari JSON Web Token (JWT), yang berisi tentang informasi atau data yang ingin dikirim. Dalam penerapannya di autentikasi atau otorisasi, umumnya data bersifat unik bagi pengguna, seperti: email, id/uuid, dan juga data yang berkaitan dengan otorisasi seperti role, karena data tersebut akan digunakan sebagai tanda pengenal si pengirim token. Payload dienkode menggunakan Base64URL dan menjadi bagian dari string JWT yang lengkap.
Contoh header
{
"sub": "1234567890",
"name": "kakmin",
"email": "admin@mail.com"
}
- Verify Signature
Verify signature merupakan hasil Hash atau gabungan dari isi encode Header dan Payload lalu ditambahkan kode secretnya. Signature ini berguna untuk memverifikasi bahwa header maupun payload yang ada dalam token tidak berubah dari nilai aslinya.
Kode signature tidak mungkin dapat diakali, karena sudah dalam berbentuk hash atau fungsi satu arah (tidak dapat dikembalikan ke nilai semula), dan apabila semisal kita tahu algoritma hashing-nya, kita juga harus mengetahui secret key nya, yang mana hal tersebut hanya diketahui oleh pembuat aplikasi
.HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.EkN-DOsnsuRjRO6BxXemmJDm3HbxrbRzXglbN2S4sOkopdU4IsDxTI8jO19W_A4K8ZPJijNLis4EZsHeY559a4DFOd50_OqgHGuERTqYZyuhtF39yxJPAjUESwxk2J5k_zM3O-vtd1Ghyo4IbqKKSy6J9mTniYJPenn5-HIirE
Kode di atas merupakan contoh JWT lengkap.
Kesimpulan
JWT menawarkan solusi yang aman, mudah digunakan, dan fleksibel untuk autentikasi dan otorisasi di berbagai aplikasi. Dengan pemahaman yang baik tentang struktur dan fungsinya, developer dapat memanfaatkan kekuatan JWT untuk membangun aplikasi yang aman dan skalabel.