JSON Web Token (JWT) adalah metode autentikasi modern yang banyak digunakan pada aplikasi mobile, web, dan layanan API. JWT membuat proses login menjadi lebih aman karena token tidak perlu disimpan di server.
1. Apa Itu JWT?
JWT adalah token berbasis JSON yang berisi data terenkripsi seperti ID user, waktu kadaluarsa, dan informasi autentikasi lainnya. Token ini ditandatangani menggunakan secret key sehingga tidak dapat dipalsukan.
2. Struktur JWT
JWT terdiri dari tiga bagian:
- Header: Jenis token & algoritma.
- Payload: Data user.
- Signature: Hasil hash dari header + payload.
3. Contoh Membuat JWT di PHP Native
Berikut contoh sederhana pembuatan token JWT:
$header = json_encode(['alg' => 'HS256', 'typ' => 'JWT']);
$payload = json_encode(['id' => $user['id'], 'exp' => time() + 3600]);
$base64Header = rtrim(strtr(base64_encode($header), '+/', '-_'), '=');
$base64Payload = rtrim(strtr(base64_encode($payload), '+/', '-_'), '=');
$signature = hash_hmac('sha256', $base64Header . "." . $base64Payload, 'SECRET_KEY', true);
$base64Signature = rtrim(strtr(base64_encode($signature), '+/', '-_'), '=');
$jwt = $base64Header . "." . $base64Payload . "." . $base64Signature;
4. Cara Memvalidasi Token JWT
Server harus memverifikasi signature JWT setiap kali request:
$cekSignature = hash_hmac('sha256', $base64Header . "." . $base64Payload, 'SECRET_KEY', true);
$validSignature = rtrim(strtr(base64_encode($cekSignature), '+/', '-_'), '=');
if ($validSignature === $tokenSignature) {
echo "Token valid";
} else {
echo "Token tidak valid";
}
5. Best Practice Keamanan JWT
- Selalu gunakan secret key panjang & acak.
- Gunakan HTTPS agar token tidak mudah dicuri.
- Jangan simpan data sensitif di payload JWT.
- Set token dengan masa berlaku (expiry) yang pendek.
- Gunakan refresh token untuk session panjang.
Dengan JWT, API kamu akan lebih modern dan aman, cocok untuk aplikasi Android, React Native, maupun web.