JWT Security — Security

JSON Web Token (JWT) JWT adalah token berbasis JSON yang sering digunakan untuk autentikasi API. JWT terdiri dari tiga bagian yang di-encode Base64: Header, Pay

JSON Web Token (JWT)

JWT adalah token berbasis JSON yang sering digunakan untuk autentikasi API. JWT terdiri dari tiga bagian yang di-encode Base64: Header, Payload, dan Signature.

// Struktur JWT
eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxMjN9.abc123signature

// Header (decoded)
{ "alg": "HS256", "typ": "JWT" }

// Payload (decoded)
{ "user_id": 123, "exp": 1700000000 }

// Signature
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

Vulnerability Umum JWT

1. Algorithm None Attack

Penyerang mengubah algoritma ke none, membuat signature tidak diperiksa:

// Header yang dimanipulasi
{ "alg": "none", "typ": "JWT" }
// Tanpa signature, token dianggap valid!

2. Algorithm Confusion (RS256 → HS256)

Jika server mendukung RS256 (asymmetric) dan HS256 (symmetric), penyerang bisa menandatangani token dengan public key sebagai HMAC secret.

3. Weak Secret Key

// JANGAN gunakan secret yang lemah
const secret = "secret123";  // Bisa di-brute-force

// Gunakan secret yang kuat (minimal 256 bit)
const secret = crypto.randomBytes(32).toString("hex");

Best Practices JWT

// Node.js: verify dengan opsi ketat
const jwt = require("jsonwebtoken");
const decoded = jwt.verify(token, secret, {
    algorithms: ["HS256"],  // Hanya izinkan algoritma tertentu
    maxAge: "1h",           // Tolak token yang terlalu lama
    issuer: "myapp"         // Validasi issuer
});

JWT vs Session: Kapan Menggunakan JWT?

Yang akan kamu pelajari