Autentikasi dan Otorisasi
Dalam pengembangan aplikasi backend, keamanan adalah salah satu aspek terpenting. Dua konsep utama yang sering digunakan untuk mengamankan aplikasi adalah autentikasi dan otorisasi. Keduanya memastikan bahwa hanya pengguna yang sah dapat mengakses data dan melakukan tindakan tertentu.
Pengertian Autentikasi
Autentikasi adalah proses untuk memverifikasi identitas pengguna. Ini dilakukan untuk memastikan bahwa pengguna adalah siapa yang mereka klaim. Biasanya melibatkan:
- Username dan Password: Metode yang paling umum digunakan.
- Token API: String unik yang diberikan kepada pengguna setelah login.
- Otentikasi Dua Faktor (2FA): Lapisan tambahan keamanan, seperti kode OTP atau aplikasi autentikator.
Pengertian Otorisasi
Otorisasi adalah proses untuk menentukan hak akses pengguna terhadap sumber daya atau tindakan tertentu. Ini terjadi setelah autentikasi berhasil. Contohnya:
- Role-Based Access Control (RBAC): Mengatur akses berdasarkan peran, seperti admin, editor, atau user biasa.
- Policy-Based Access Control (PBAC): Hak akses yang ditentukan berdasarkan kebijakan tertentu.
Teknik Autentikasi dan Otorisasi
Berikut adalah beberapa teknik yang umum digunakan:
- Session: Data autentikasi disimpan di server dan diidentifikasi menggunakan cookie di browser.
- JSON Web Token (JWT): Token berbasis JSON yang dikirimkan di header HTTP untuk autentikasi.
- OAuth: Protokol otorisasi yang memungkinkan aplikasi pihak ketiga untuk mengakses data tanpa membagikan kredensial pengguna.
Membuat Sistem Autentikasi dengan Node.js
Berikut adalah contoh sederhana implementasi autentikasi menggunakan Node.js dan JWT:
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
app.use(express.json());
// Secret key
const SECRET_KEY = 'your_secret_key';
// Login route
app.post('/login', (req, res) => {
const { username, password } = req.body;
// Verifikasi username dan password (contoh hardcoded)
if (username === 'admin' && password === '1234') {
const token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' });
return res.json({ token });
}
res.status(401).json({ message: 'Invalid credentials' });
});
// Protected route
app.get('/dashboard', (req, res) => {
const token = req.headers['authorization'];
if (!token) return res.status(403).json({ message: 'No token provided' });
try {
const decoded = jwt.verify(token, SECRET_KEY);
res.json({ message: `Welcome ${decoded.username}` });
} catch (err) {
res.status(401).json({ message: 'Invalid token' });
}
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
Best Practices
Untuk menjaga keamanan aplikasi, berikut adalah beberapa best practices:
- Gunakan HTTPS untuk semua komunikasi.
- Hindari menyimpan password dalam bentuk teks biasa, gunakan hashing (seperti bcrypt).
- Implementasikan rate limiting untuk mencegah serangan brute force.
- Gunakan token dengan masa berlaku yang terbatas.
Kesimpulan
Autentikasi dan otorisasi adalah komponen penting untuk melindungi aplikasi dan data pengguna. Dengan memahami konsep ini, Anda dapat menciptakan sistem yang lebih aman dan andal.