JSON Web Tokens (JWT): Panduan Autentikasi
Panduan lengkap autentikasi JWT. Pelajari struktur JWT, implementasi, praktik terbaik keamanan, dan strategi penyegaran token.
Big JSON Team
• Technical WriterExpert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.
Apa Itu JWT?
JSON Web Token (JWT) adalah format token yang ringkas dan aman untuk URL guna mengirimkan informasi secara aman antar pihak.
Struktur JWT
JWT memiliki tiga bagian yang dipisahkan oleh titik:
header.payload.signature
Header
{
"alg": "HS256",
"typ": "JWT"
}
Payload (Klaim)
{
"sub": "1234567890",
"name": "John",
"iat": 1516239022,
"exp": 1516242622
}
Signature
Dibuat dengan menandatangani header + payload dengan kunci rahasia (secret key).
Klaim Standar
- sub: Subjek (ID pengguna)
- iss: Penerbit (Issuer)
- aud: Audiens
- exp: Waktu kedaluwarsa
- iat: Waktu diterbitkan
- nbf: Tidak sebelum (Not before)
Implementasi
Node.js
import jwt from 'jsonwebtoken';
const SECRET = process.env.JWT_SECRET;
// Membuat token
function createToken(user) {
return jwt.sign(
{ sub: user.id, email: user.email },
SECRET,
{ expiresIn: '1h' }
);
}
// Memverifikasi token
function verifyToken(token) {
try {
return jwt.verify(token, SECRET);
} catch (error) {
return null;
}
}
Python
import jwt
from datetime import datetime, timedelta
SECRET = os.environ['JWT_SECRET']
def create_token(user):
payload = {
'sub': user['id'],
'exp': datetime.utcnow() + timedelta(hours=1)
}
return jwt.encode(payload, SECRET, algorithm='HS256')
def verify_token(token):
try:
return jwt.decode(token, SECRET, algorithms=['HS256'])
except jwt.InvalidTokenError:
return None
Middleware Express
function authMiddleware(req, res, next) {
const token = req.headers.authorization?.split(' ')[1];
if (!token) {
return res.status(401).json({ error: 'Tidak ada token' });
}
try {
req.user = jwt.verify(token, SECRET);
next();
} catch (error) {
res.status(401).json({ error: 'Token tidak valid' });
}
}
app.get('/protected', authMiddleware, (req, res) => {
res.json({ user: req.user });
});
Strategi Penyegaran Token (Token Refresh)
// Access token berumur pendek
function createAccessToken(user) {
return jwt.sign(
{ sub: user.id, type: 'access' },
ACCESS_SECRET,
{ expiresIn: '15m' }
);
}
// Refresh token berumur panjang
function createRefreshToken(user) {
return jwt.sign(
{ sub: user.id, type: 'refresh' },
REFRESH_SECRET,
{ expiresIn: '7d' }
);
}
Praktik Terbaik Keamanan
Kesalahan Umum
Jangan Simpan Data Sensitif
// ❌ Buruk
const token = jwt.sign({
userId: 123,
password: 'rahasia' // Jangan pernah lakukan ini!
}, secret);
// ✅ Baik
const token = jwt.sign({
sub: 123,
role: 'user'
}, secret);
Selalu Validasi Algoritma
// ❌ Rentan
jwt.verify(token, secret);
// ✅ Aman
jwt.verify(token, secret, { algorithms: ['HS256'] });
Penanganan Token di Sisi Klien
class AuthService {
async fetch(url, options = {}) {
const token = localStorage.getItem('accessToken');
const response = await fetch(url, {
...options,
headers: {
...options.headers,
'Authorization': Bearer ${token}
}
});
if (response.status === 401) {
await this.refreshToken();
return this.fetch(url, options);
}
return response;
}
}
Penyimpanan Token
HttpOnly Cookies (Direkomendasikan)
res.cookie('token', jwt, {
httpOnly: true,
secure: true,
sameSite: 'strict',
maxAge: 3600000
});
LocalStorage (Kurang Aman)
localStorage.setItem('token', jwt);
Kesimpulan
JWT sangat andal untuk autentikasi stateless. Gunakan waktu kedaluwarsa yang singkat, validasi semua klaim, dan jangan pernah menyimpan data sensitif di dalam payload!
Artikel Terkait
Apa itu JSON? Panduan Lengkap untuk Pemula 2026
Pelajari apa itu JSON, sintaksisnya, tipe data, dan kegunaannya. Panduan lengkap dan ramah pemula untuk memahami JavaScript Object Notation.
JavaScript JSON: Parse, Stringify, dan Praktik Terbaik
Panduan lengkap JSON dalam JavaScript. Pelajari JSON.parse(), JSON.stringify(), penanganan kesalahan, dan teknik tingkat lanjut untuk pengembangan web.
API JSON dan Layanan REST: Panduan Pengembangan Lengkap
Pelajari cara membangun dan mengonsumsi API REST berbasis JSON. Mencakup metode HTTP, autentikasi, praktik terbaik, dan contoh implementasi dunia nyata.