Token
Setelah memiliki middleware auth sederhana (hanya cek panjang token), sekarang saatnya mengimplementasikan autentikasi yang sesungguhnya menggunakan JWT (JSON Web Token).
📂 Kode Lengkap Bab Ini: Seluruh kode yang dibahas di bab ini tersedia di GitHub:
17.1 Mengapa JWT?
State
Stateless (tidak perlu session di server)
Stateful (perlu menyimpan session)
Scalability
Sangat mudah (horizontal scaling)
Perlu session store bersama (Redis)
Mobile friendly
✅ Ya
❌ Perlu cookie handling
Expiration
Built-in (exp claim)
Perlu implementasi sendiri
17.2 Alur Autentikasi dengan JWT
1. Client mengirim email + password ke /login
│
▼
2. Server validasi credential, buat JWT
│
▼
3. Server mengembalikan JWT ke client
│
▼
4. Client menyimpan token (localStorage / secure cookie)
│
▼
5. Client mengirim token di header Authorization: Bearer <token>
│
▼
6. Middleware Auth memvalidasi token
│
▼
7. Jika valid, request diteruskan ke handler17.3 Konfigurasi Token
Tambahkan konfigurasi token di .env:
TOKEN_SALT
Kunci rahasia untuk signing JWT (harus aman, jangan di-commit)
TOKEN_EXP
Masa berlaku token dalam jam (24 jam = 1 hari)
17.4 Library Token
Kita akan menggunakan library dari go-libs/token yang membungkus golang-jwt/jwt:
17.5 Update Konfigurasi
Tambahkan TokenConfig ke struct Config:
17.6 Repository: FindByEmail
Kita perlu mencari user berdasarkan email untuk proses login:
17.7 Service: Auths
Service ini bertanggung jawab untuk logika autentikasi:
17.8 DTO untuk Login
17.9 Handler: AuthHandler
17.10 Update Auth Middleware dengan Validasi JWT
Sekarang middleware auth yang sesungguhnya: memvalidasi JWT dan menyimpan claims ke context:
17.11 Update Routing
Tambahkan endpoint /login dan gunakan cfg.Token untuk auth service:
17.12 Testing Autentikasi
Login dengan credential salah
Response:
Login dengan credential benar
Response
Akses private route dengan token valid
Akses private route tanpa token
Response
Akses private route dengan token expired/invalid
17.13 Aliran Lengkap Autentikasi
Ringkasan Bab 17
Di bab ini kita telah belajar:
JWT Library
go-libs/token
Generate & validate token
Token Config
config/config.go
Salt & expiration
Auth Service
service/auths.go
Login logic
Auth Handler
handler/auth_handler.go
HTTP endpoint /login
Auth Middleware
middleware/auth_middleware.go
Validate token, inject to context
Manfaat yang kita peroleh:
✅ Autentikasi stateless (tidak perlu session storage)
✅ Password tidak pernah dikirim dalam response
✅ Token memiliki masa berlaku (expiration)
✅ Claims dapat diakses di handler via context
✅ Middleware auth sekarang benar-benar memvalidasi JWT
Yang akan datang:
Saat ini semua user dengan token valid bisa mengakses semua endpoint
Bab selanjutnya: Role Based Access Controller (Otorisasi) – membatasi akses berdasarkan role user
Last updated
Was this helpful?