Wednesday, June 15, 2016

JWT (JSON Web Token)

JSON Web Token atau lebih dikenal dengan JWT, merupakan sebuah token berbentuk JSON yang padat (ukurannya), informasi mandiri untuk ditransmisikan antar pihak yang terkait. Token tersebut ini dapat diverifikasi dan dipercaya karena sudah di-sign secara digital. Token JWT bisa di-sign dengan menggunakan secret (algoritma HMAC) atau pasangan public / private key (algoritma RSA).

Kenapa dibilang JSON yang padat ?, karena ukurannya yang kecil, token JWT dapat dikirim melalui URL, Parameter Http POST atau di dalam Header Http. Dan juga karena ukurannya yang kecil maka dapat ditransmisikan dengan lebih cepat.

Dan kenapa dibilang Informasi mandiri ?, karena isi dari tokennya mengandung informasi dari user yang dibutuhkan, sehingga tidak perlu query ke database lebih dari 1 kali.

Untuk lebih memperjelas mari kita lihat contoh tokennya :
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.EkN-DOsnsuRjRO6BxXemmJDm3HbxrbRzXglbN2S4sOkopdU4IsDxTI8jO19W_A4K8ZPJijNLis4EZsHeY559a4DFOd50_OqgHGuERTqYZyuhtF39yxJPAjUESwxk2J5k_4zM3O-vtd1Ghyo4IbqKKSy6J9mTniYJPenn5-HIirE
Pada contoh token tersebut terdapat 3 bagian yaitu :
  1. Header (Algoritma & Jenis Token)
  2. eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
  3. Payload (Data)
  4. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
  5. Signature (Verify Signature)
  6. EkN-DOsnsuRjRO6BxXemmJDm3HbxrbRzXglbN2S4sOkopdU4IsDxTI8jO19W_A4K8ZPJijNLis4EZsHeY559a4DFOd50_OqgHGuERTqYZyuhtF39yxJPAjUESwxk2J5k_4zM3O-vtd1Ghyo4IbqKKSy6J9mTniYJPenn5-HIirE
    Untuk lebih jelas, bisa cek ke https://jwt.io/#debugger dengan memasukan token seperti diatas.

Kapan sebaiknya kita menggunakan JWT ?


JWT umumnya digunakan untuk :
  • Autentikasi
  • Ketika user/client melakukan autentikasi dan mendapatkan token, maka untuk seterusnya setiap request harus menyertakan token tersebut.
  • Pertukaran Informasi
  • Dengan token yang sudah di-sign misal dengan algoritma RSA, kita dapat mengetahui dan yakin siapa yang melakukan request tersebut. Terlebih dengan isi pada bagian Signature merupakan gabungan dari isi Header dan Payload, jadi jika isi Header/Payload dirubah maka isi Signature menjadi tidak valid.

Bagaimana JWT bekerja ?


Umumnya ketika user berhasil melakukan login, maka server akan mengembalikan token JWT dan akan disimpan pada Local Storage / Cookies Browser. Selanjutnya untuk setiap request yang akan mengakses API yang terproteksi harus menyertakan token tersebut.

Umumnya token tersebut akan disertakan pada Authorization Header dengan Bearer schema, contohnya seperti ini :
Authorization: Bearer <token>

Ini merupakan mekanisme autentikasi yang stateless, karena state user yang login tidak disimpan pada memory server. Jadi setiap request kepada API yang terproteksi akan dicek apakah token JWT yang ada di Authorization header valid atau tidak, bila valid maka request akan diijinkan dan diproses.

Dan karena semua informasi yang dibutuhkan pada JWT sudah lengkap, maka setiap proses pengecekan tersebut sudah tidak perlu lagi melakukan query ke database.

Sekian sharing kali ini, semoga menambah wawasan kita semua. :)

No comments:

Post a Comment