UI vs. UX: What’s the difference?

Mengenal JWT: JSON Web Token untuk Autentikasi

JWT (dibaca: jey-double-yu-tee) adalah singkatan dari JSON Web Token, yaitu format token yang sering digunakan untuk mengelola autentikasi (login) dan otorisasi (hak akses) di aplikasi web atau API.

JWT sangat populer karena:

  • Ringan (berbasis JSON)
  • Mudah digunakan antar server dan client
  • Aman jika digunakan dengan benar

Fungsi JWT dalam Aplikasi

JWT sering digunakan untuk:

  • Menyimpan data login user secara aman
  • Menghindari login berulang-ulang (session-less)
  • Mengizinkan atau menolak akses ke halaman tertentu
  • Komunikasi antar layanan (microservices)

Struktur JWT: Ada Apa di Dalamnya?

JWT terdiri dari 3 bagian utama, yang dipisahkan oleh tanda titik (.):

xxxxx.yyyyy.zzzzz

  1.Header

  • Berisi tipe token (JWT) dan algoritma yang digunakan untuk tanda tangan (signing), misalnya HS256.
{
 "alg": "HS256",
 "typ": "JWT"
}

  2.Payload

  • Isi token: berisi data seperti id, username, atau role user.
  • Hati-hati! Payload tidak dienkripsi, hanya di-encode.
{
 "id": 123,
 "username": "dryy",
 "role": "admin"
}

  3.Signature

  • Bagian ini dibuat dari Header + Payload yang di-hash dengan secret key.
  • Fungsinya: agar data tidak bisa dimanipulasi oleh pihak luar.

Kenapa JWT Aman?

JWT tidak menyimpan password. Ia hanya membawa informasi siapa user-nya dan memastikan data itu tidak diubah.

Namun, ingat:

  • Payload bisa dibaca siapa saja (karena tidak dienkripsi).
  • Jangan pernah menyimpan informasi sensitif (seperti password) di payload.
  • Gunakan HTTPS agar token tidak bisa dicuri.

Cara Kerja JWT dalam Autentikasi

  1. User login ke server (kirim username dan password)
  2. Jika valid, server menghasilkan JWT dan mengirim ke client
  3. Client menyimpan token, biasanya di localStorage atau cookie
  4. Setiap request ke API, client kirim token di header:
Authorization: Bearer 

   5.Server memverifikasi token sebelum memberikan respon

Contoh Kasus: Autentikasi di Express.js

Misalnya kamu buat API login. Kalau login sukses, kirim JWT:

const jwt = require('jsonwebtoken');

app.post('/login', (req, res) => {
  const user = { id: 1, username: 'dryy' };
  const token = jwt.sign(user, 'rahasia123', { expiresIn: '1h' });
  res.json({ token });
});

Kemudian untuk melindungi route tertentu:

function authMiddleware(req, res, next) {
  const token = req.headers['authorization']?.split(' ')[1];
  if (!token) return res.sendStatus(401);

  jwt.verify(token, 'rahasia123', (err, user) => {
    if (err) return res.sendStatus(403);
    req.user = user;
    next();
  });
}

app.get('/profile', authMiddleware, (req, res) => {
  res.json({ message: 'Halo, ' + req.user.username });
});

Keuntungan Menggunakan JWT

  • Tidak perlu menyimpan session di server
  • Ringan, karena hanya string yang dikirim
  • Bisa digunakan di berbagai platform (web, mobile, API)
  • Bisa diatur masa berlaku token (expired)

Risiko & Hal yang Perlu Diperhatikan

  • Jangan simpan token di tempat yang bisa diakses oleh JavaScript jika kamu khawatir soal XSS (gunakan cookie httpOnly)
  • Gunakan HTTPS agar token tidak bisa disadap (sniffed)
  • Jangan menyimpan data sensitif di payload
  • Perbarui token secara berkala (token refresh)

Kesimpulan

JWT adalah cara modern dan efisien untuk menangani login dan otorisasi di aplikasi web. Dengan JWT, kamu bisa membuat sistem autentikasi yang ringan, cepat, dan bisa diakses lintas platform.

Tapi ingat gunakan dengan aman. Pahami cara kerja dan potensi risikonya sebelum mengimplementasikan ke aplikasi kamu.