Back to Blog Security & API

Autentikasi API dengan JWT

Login→Access token→API→Refresh

JWT cocok ketika beberapa layanan perlu memverifikasi klaim tanpa selalu bertanya ke session store. JWT bukan otomatis lebih aman atau lebih skalabel daripada session; ia memindahkan trade-off ke rotasi token, revocation, dan pengelolaan key.

Isi token sesedikit mungkin

JSON
{
  "iss": "https://auth.example.com",
  "sub": "user_1842",
  "aud": "inventory-api",
  "iat": 1785052800,
  "exp": 1785053700,
  "scope": ["products:read"]
}

Payload JWT dapat dibaca oleh siapa pun yang memegang token. Jangan simpan password, nomor identitas, atau data rahasia di dalamnya.

Access token pendek, refresh token terkendali

TokenMasa hidupPenyimpananFungsi
Access token5–15 menitMemory atau secure client storageMengakses API.
Refresh tokenHari/mingguSecure HttpOnly cookie / secure storageMendapat access token baru.

Verifikasi lebih dari signature

PHP
$claims = $jwt->decode($token, $publicKey);
if ($claims->issuer !== $expectedIssuer) throw new UnauthorizedException();
if (!in_array($apiAudience, $claims->audience, true)) throw new UnauthorizedException();
if ($claims->expiresAt <= time()) throw new UnauthorizedException();
if (!in_array('products:read', $claims->scope, true)) throw new ForbiddenException();

Logout dan pencabutan token

Access token stateless sulit dicabut sebelum kedaluwarsa. Solusinya: masa hidup pendek, rotation refresh token, daftar token yang dicabut untuk kejadian darurat, dan versi sesi per pengguna.

Kapan session lebih sederhana?

Untuk aplikasi monolith dengan browser sebagai satu-satunya client, session server-side sering lebih mudah diaudit dan dicabut. Pilih JWT karena kebutuhan arsitektur, bukan karena tren.

Share this article

Related articles

Copied