P
PUGUH
authentication jwt security

JWT RS256: Mengapa Asymmetric Auth Lebih Baik untuk Microservices

ARSAKA Team ·

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:

  1. Hanya PUGUH bisa membuat (sign) JWT — private key tetap di satu tempat
  2. Semua services bisa verify JWT secara lokal — cukup download public key
  3. Zero network call untuk verification — public key di-cache lokal
  4. 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:

  1. Generate key pair baru dengan kid baru
  2. Tambahkan ke JWKS (sekarang ada 2 keys)
  3. Mulai sign token baru dengan key baru
  4. 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.