Authentication & JWT Guide
✅ Status: Documented | Last updated: 2025-12-18Panduan lengkap untuk implementasi Authentication dan JWT Token lifecycle di MStore Backend.
Overview
MStore menggunakan JWT (JSON Web Token) dengan arsitektur Access Token + Refresh Token untuk autentikasi yang aman dan scalable.Key Features
Multi-Method Login
Support login via Password, Google, dan Apple
Token Rotation
Refresh token rotation untuk keamanan maksimal
Session Security
Session tracking dengan audit trail
Revoke Support
Logout single session atau all sessions
Architecture
Implementation Details
1. JWT Payload Structure
Access token berisi informasi user yang diperlukan:2. Token Configuration
3. Auth Middleware
API Endpoints
Login
Refresh Token
Refresh token menggunakan hashed rotation - setiap kali di-refresh, token
lama akan di-invalidate dan token baru digenerate.
Logout
Logout All Sessions
Middleware Stack
MStore Backend menggunakan middleware chain untuk security:| Order | Middleware | File | Purpose |
|---|---|---|---|
| 1 | RequestIDMiddleware | auth.go | Correlation ID untuk tracing |
| 2 | AuditLogMiddleware | audit_log.go | Audit trail logging |
| 3 | RBACEnforcerMiddleware | rbac_enforcer.go | Role-based access control |
| 4 | AuthMiddleware | auth.go | JWT validation |
| 5 | RateLimitRefreshByIP | ratelimit.go | Rate limiting (10 req/min) |
Session Activity Tracking
Setiap login dan aktivitas session disimpan untuk audit:Security Best Practices
- Token Expiry: Access token: 60 menit, Refresh token: 7 hari
- Hashed Storage: Refresh token disimpan sebagai hash di database
- Token Rotation: Setiap refresh menghasilkan token baru
- Session Revocation: Support logout single/all sessions
- Rate Limiting: 10 request/menit per IP untuk refresh endpoint
Related Files
Auth Service
internal/domains/auth/auth_service.goAuth Middleware
internal/middleware/auth.goJWT Utils
pkg/utils/jwt/Rate Limiter
internal/middleware/ratelimit.go