Ticket Context
Steps:
1. Create JwtService class in src/auth/
2. Implement RS256 signing with jose
3. Add configurable expiration
Acceptance Criteria:
Tokens signed with RS256
Tokens expire after 15min
Files:
src/auth/jwt.service.ts
src/auth/jwt.service.test.ts
Blueprint (from epic)
Sequence: Auth Token Flow
Actors: Client → Gateway → AuthService → TokenStore
Token refresh: rotating key pairs
Error path: expired → 401 → refresh → retry