Authentication Architecture
Token — JWT HS256 (Axum·Workers 통일 계약)
header.payload.signature — HMAC-SHA256
iss=nougat-devpay, aud=nougat-api, exp=24h, sub=user_id, role, seller_id1
2
2
- Axum:
NOUGAT_JWT_SECRET, X-Admin-Key fallback, JWT iss/aud/exp 검증 - Workers:
NOUGAT_AUTH_SECRET, 동일 JWT 형식 검증 (verify_token) - Staging dev: DEV_AUTH=1이면 X-Dev-User 허용 — production 무시
- Secret: 브라우저·NUXT_PUBLIC_*·git에 절대 미포함
Password — PBKDF2-SHA256
- WebCrypto
crypto.subtle.deriveBits— WASM CPU 한도 우회(네이티브) - 형식
pbkdf2$50000$salt$hash, 50k iter - 레거시 sha256+salt 자동 호환 → 로그인 시 PBKDF2로 재저장(점진 마이그레이션)
Auth flow
login → verify(iss+aud+exp+sig) → user.status=active? → seller_scope
signup → email+pw≥8 → pbkdf2 → usr_* → buyer role → 즉시 JWT
logout → client token 폐기(stateless, 서버 revoke는 후속)1
2
3
2
3
권한
- buyer: 본인 orders/licenses/subscriptions
- seller: seller_id 스코프 리소스 (orders/projects/products/…) + seller_memberships
- admin: 전체 — /admin/* 명시적 role=admin