Framework
Auth & JWT
JWT utilities yang tersedia, custom claims, opaque refresh token, dan cara implementasi auth sebagai plugin.
JWT utilities (internal/auth)
Framework menyediakan JWT utilities stateless — tidak ada middleware auth atau model user bawaan.
// Generate
token, err := auth.SignAccessToken(userID)
refresh, err := auth.SignRefreshToken(userID)
// Parse/verify
userID, err := auth.ParseAccessToken(tokenStr)
userID, err := auth.ParseRefreshToken(tokenStr)
// Expiry
accessExp := auth.AccessExpirySeconds() // 900 (15 menit)
refreshExp := auth.RefreshExpirySeconds() // 1209600 (14 hari)
Custom claims
token, expTime, err := auth.GenerateAccessTokenWithLevel(adminID, "admin", 15*time.Minute)
claims, err := auth.ParseAccessTokenClaims(tokenStr)
// claims.AdminID, claims.Level, claims.ExpiresAt
Opaque refresh token (non-JWT)
plainToken, hashedToken, err := auth.GenerateOpaqueRefreshToken()
// simpan hashedToken di DB, kirim plainToken ke client
receivedHash := auth.HashOpaqueToken(plainTokenFromClient)
// bandingkan dengan hash di DB
Poin penting
- JWT stateless & database-agnostic — hanya encode/decode data ke token string
- Query DB dilakukan terpisah memakai ID dari token
- Nama kolom & struktur tabel sepenuhnya terserah kamu
Implementasi auth sebagai plugin
- Buat plugin:
go run ./cmd/console plugin new --id auth - Tambah model user/admin di plugin
- Implement handler login/register + service
- Buat middleware yang validasi token & inject user ID ke context
- Register middleware dengan priority sesuai di
RegisterMiddleware()
Security recommendations
- Jangan commit
AUTH_JWT_SECRET— pakai secret manager - Access token pendek (900s), refresh token panjang
- Selalu HTTPS; cookie flag
Secure,HttpOnly,SameSite