Konsep Dasar Validasi Scope JWT
Validasi scope dalam JSON Web Token (JWT) adalah mekanisme otorisasi berbasis klaim (claims-based authorization). Berbeda dengan autentikasi yang memverifikasi identitas, validasi scope memastikan bahwa token yang valid memiliki izin (permissions) spesifik untuk mengakses resource tertentu. Dalam ekosistem Node.js, implementasi ini dilakukan melalui middleware yang memeriksa array scope di dalam payload JWT sebelum memproses request ke controller.
Implementasi Middleware Validasi
Berikut adalah implementasi middleware menggunakan pustaka jsonwebtoken untuk memverifikasi apakah token mengandung scope yang dibutuhkan.
const jwt = require('jsonwebtoken');
const checkScope = (requiredScope) => {
return (req, res, next) => {
const authHeader = req.headers.authorization;
if (!authHeader) return res.status(401).json({ message: 'Token tidak ditemukan' });
const token = authHeader.split(' ')[1];
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
const scopes = decoded.scope || [];
if (scopes.includes(requiredScope)) {
req.user = decoded;
next();
} else {
res.status(403).json({ message: 'Akses ditolak: Scope tidak mencukupi' });
}
} catch (err) {
res.status(401).json({ message: 'Token tidak valid' });
}
};
};
// Penggunaan di Route
app.get('/admin/data', checkScope('admin:read'), (req, res) => {
res.send('Data rahasia admin');
});Tabel Perbandingan Metode Otorisasi
| Metode | Kelebihan | Kekurangan |
|---|---|---|
| JWT Scope | Stateless, skalabel, performa tinggi | Token tidak bisa dicabut sebelum expired |
| Database Check | Real-time, mudah dicabut | Beban query database tinggi |
| RBAC (Role) | Manajemen simpel | Kurang fleksibel untuk akses granular |
Langkah Teknis Implementasi
- Definisikan Scope: Tentukan daftar scope (misal:
read:users,write:posts) di sisi server. - Generate Token: Saat login, sertakan array scope dalam payload JWT.
- Middleware Validation: Gunakan fungsi middleware di atas pada route yang membutuhkan proteksi.
- Error Handling: Pastikan response 403 (Forbidden) dikembalikan jika scope tidak cocok, dan 401 (Unauthorized) jika token kedaluwarsa atau rusak.
Troubleshooting Lapangan
- Token Terlalu Besar: Jika scope terlalu banyak, ukuran header HTTP bisa membengkak. Gunakan singkatan (misal:
r:uuntukread:users). - Scope Dinamis: Jika scope berubah sering, pertimbangkan untuk menyimpan scope di Redis dan melakukan validasi tambahan di middleware.
- Secret Key: Pastikan
process.env.JWT_SECRETtersimpan aman di environment variable, bukan hardcoded di dalam source code.
🔍 Orang Lain Juga Mencari Ini
Nodejs Jwt Authorization Middleware
Jwt Scope Vs Role
Implementing Rbac With Jwt Nodejs
Jsonwebtoken Verify Scope
Expressjs Protected Routes Jwt
Oauth2 Scopes Explained
Secure Api Nodejs Jwt
Jwt Payload Structure
Node Js Authentication Best Practices
Express Middleware Authorization Pattern
Jwt Claims Validation
Api Security Nodejs
Role Based Access Control Nodejs
Token Based Authentication Nodejs
Validate Jwt Scopes Express