JWT RS256: Mengapa Asymmetric Auth Lebih Baik untuk Microservices
Kebanyakan tutorial JWT menggunakan HS256 (symmetric) untuk signing. Ini oke untuk monolith, tapi bermasalah di arsitektur multi-service. PUGUH menggunakan RS256 (asymmetric) — dan ini alasannya.
Symmetric vs Asymmetric JWT
HS256 (Symmetric)
- Satu secret key digunakan untuk sign DAN verify
- Setiap service yang perlu verify token harus punya secret key yang sama
- Jika satu service compromised, semua service harus rotate key
RS256 (Asymmetric)
- Private key untuk signing (hanya auth server)
- Public key untuk verification (semua services)
- Service yang compromised hanya punya public key — tidak bisa membuat token palsu
Mengapa RS256 ideal untuk multi-service
Dalam arsitektur PUGUH, ada banyak service yang perlu verify JWT:
PUGUH Auth Server (punya private key)
│
├── MANTRA (verify dengan public key)
├── TUTUR (verify dengan public key)
└── Product Anda (verify dengan public key)
Dengan RS256:
- Hanya PUGUH bisa membuat (sign) JWT — private key tetap di satu tempat
- Semua services bisa verify JWT secara lokal — cukup download public key
- Zero network call untuk verification — public key di-cache lokal
- PUGUH down? No problem — existing tokens masih bisa di-verify
JWKS Endpoint
PUGUH expose public key via JWKS (JSON Web Key Set):
GET https://api-puguh.arsaka.io/.well-known/jwks.json
Response:
{
"keys": [
{
"kty": "RSA",
"kid": "puguh-2026-02",
"use": "sig",
"alg": "RS256",
"n": "...",
"e": "AQAB"
}
]
}
Service Anda cukup fetch JWKS sekali (cache 24 jam), lalu verify semua token secara lokal. Latency verification: < 1ms.
Implementasi di Python
from puguh_sdk import PuguhClient
puguh = PuguhClient(
base_url="https://api-puguh.arsaka.io",
api_key="your-api-key"
)
# SDK otomatis:
# 1. Fetch JWKS dari PUGUH
# 2. Cache public key
# 3. Verify token secara lokal (RS256)
context = await puguh.auth.validate_token(jwt_token)
# context berisi:
# - user_id
# - organization_id
# - roles
# - permissions
Key Rotation
PUGUH mendukung key rotation tanpa downtime:
- Generate key pair baru dengan
kidbaru - Tambahkan ke JWKS (sekarang ada 2 keys)
- Mulai sign token baru dengan key baru
- Setelah semua token lama expire, hapus key lama dari JWKS
Karena JWKS bisa punya multiple keys, service yang cache JWKS akan otomatis pick up key baru saat refresh (setiap 24 jam atau saat verification gagal).
Kapan HS256 masih okay?
- Monolith (satu service = satu secret)
- Internal-only API (tidak exposed ke third party)
- Development/testing environment
Untuk semua kasus lain — terutama multi-service dan multi-product seperti ARSAKA — RS256 adalah pilihan yang lebih aman dan scalable.