Recraftory

JSON Web Token

  • JWT adalah standar terbuka (RFC 7519) untuk pertukaran data secara aman
  • Data dikemas dalam bentuk token berbasis JSON
  • Umumnya digunakan untuk authentication dan authorization
  • Bersifat stateless (server tidak menyimpan session)

Penjelasan: JWT memungkinkan server mengenali user tanpa menyimpan data session di server. Setiap request membawa token, sehingga cocok untuk REST API dan SPA.

Struktur JWT

  • Terdiri dari tiga bagian: Header, Payload, dan Signature
  • Dipisahkan oleh tanda titik (.)
  • Format: header.payload.signature

Penjelasan: JWT bukan data yang terenkripsi secara default, tetapi ditandatangani (signed) agar tidak bisa diubah tanpa diketahui server.

  • Berisi informasi algoritma dan tipe token
  • Contoh: alg (HS256), typ (JWT)

Penjelasan: Header memberi tahu server bagaimana token ditandatangani.

Payload

  • Berisi klaim (claims) atau data user
  • Contoh: user id, role, expiry time

Penjelasan: Payload bisa dibaca siapa saja, jadi jangan menyimpan data sensitif seperti password atau data rahasia.

Signature

  • Digunakan untuk verifikasi keaslian token
  • Dibuat dari header, payload, dan secret key

Penjelasan: Signature memastikan token tidak diubah oleh pihak lain.

Alur Penggunaan JWT

  • User login dengan username dan password
  • Server memverifikasi kredensial
  • Server mengirim JWT ke client
  • Client menyimpan JWT (biasanya di memory atau storage)
  • Client mengirim JWT di setiap request

Penjelasan: Jika token valid, server mempercayai request tanpa perlu cek session.

Penggunaan JWT di Web Application

  • Digunakan pada REST API
  • Cocok untuk SPA (React, Vue, dll)
  • Digunakan untuk microservices authentication

Penjelasan: Karena stateless, JWT mudah diskalakan dan tidak bergantung pada server tertentu.

Cara Mengirim JWT

  • Melalui HTTP Header (Authorization)
  • Format: Authorization: Bearer [TOKEN]

Penjelasan: Mengirim token lewat header lebih aman dibanding query string.

Kelebihan JWT

  • Stateless dan scalable
  • Mudah diintegrasikan
  • Tidak bergantung pada session server

Kekurangan JWT

  • Sulit untuk revoke token sebelum expired
  • Jika bocor, token bisa disalahgunakan
  • Ukuran token lebih besar dari session id

Best Practice Penggunaan JWT

  • Gunakan expiry time yang pendek
  • Simpan secret key dengan aman
  • Jangan simpan data sensitif di payload
  • Gunakan HTTPS
  • Kombinasikan dengan refresh token jika perlu