JSON Web Token
atau biasa disebut dengan JWT adalah standar terbuka (RFC 7519) yang mendefinisikan cara untuk mentransmisikan informasi dengan aman antar pihak sebagai objek JSON. Informasi ini dapat diverifikasi dan dipercaya karena ditandatangani secara digital. JWT dapat ditandatangani menggunakan sebuah secreet (dengan algoritma HMAC
) atau pasangan kunci publik / pribadi menggunakan RSA
atau ECDSA
. (https://jwt.io/introduction/)
Sederhananya JWT
merupakan Web Token yang berupa JSON dan umumnya digunakan untuk proses authentication. Dimana untuk mendapatkan suatu data di dalam server kita harus menyertakan token tersebut sebagai kuncinya.
Kapan kita harus menggunakan JSON Web Token?
-
Authentication
Ketika pengguna melakukan authentication dan mendapatkan token, maka setiap permintaan berikutnya akan menyertakan token tersebut, dan memungkinkan pengguna untuk mengakses route, service, dan resources yang diizinkan.
-
Pertukaran Informasi
JSON Web Token adalah cara yang baik untuk mengirimkan informasi antar pihak dengan aman. Dengan token yang sudah ditandatangani dengan algoritma RSA, maka kita bisa tahu siapa yang melakukan request tersebut.
Bagaimana cara kerja JSON Web Token?
Sama seperti cara kerja password. Saat user berhasil melakukan proses otentikasi, maka server akan memberikan sebuah token dan token tersebut nantinya akan disimpan oleh user di dalam client side, seperti localStorage atau Cookies. Dan untuk permintaan selanjutnya, kita harus menyertakan token tersebut sebagai bukti bahwa user tersebut sudah melakukan proses otentikasi.
Struktur di JSON Web Token
Dalam bentuknya yang ringkas, JSON Web Token terdiri dari tiga bagian yang dipisahkan oleh titik (.
), yaitu:
Oleh karena itu, JWT biasanya terlihat seperti berikut ini.
xxxxx.yyyyy.zzzzz
Mari kita memecah bagian yang berbeda.
Header
Header biasanya terdiri dari dua bagian: jenis token, yaitu JWT, dan algoritma penandatanganan yang digunakan, seperti HMAC SHA256 atau RSA.
Contohnya :
{
"alg": "HS256",
"typ": "JWT"
}
Kemudian, JSON ini encode Base64Url untuk membentuk bagian pertama dari JWT.
Payload
Bagian kedua dari token adalah payload, yang berisi klaim. Klaim adalah pernyataan tentang suatu entitas (biasanya, berupa data pengguna), seperti nama, email, dan lain-lain.
CATATAN ! : jangan menambahkan informasi yang sifatnya sensitif pada payload, seperti password
.
Contohnya :
{
"sub": "1234567890",
"name": "Fika Ridaul Maulayya",
"admin": true
}
Signature
Siganture berisi data Header dan Payload yang sudah di encode, kemudian ditambahkan sebuah kode screet. Signature berperan untuk memverifikasi nilai yang ada di dalam Header dan Payload tidak berubah isinya.
Misalnya jika Anda ingin menggunakan algoritma HMAC SHA256, signature akan dibuat dengan cara berikut:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
Dari hasil gabungan Header, Payload dan Signatur. Maka akan menjadi sebuah token yang dirandom sangat panjang, kurang lebih seperti berikut ini.
Kurang lebih seperti itu penjelasan tentang apa itu JWT atau JSON Web Token. Pada artikel selanjutnya kita semua akan belajar bagaimana cara mengimplementasikannya di dalam Laravel.
Terima Kasih