v0.1.34: кэш валидации JWT + smoke-тесты
This commit is contained in:
@@ -355,3 +355,30 @@ Smoke-тест: `aws sqs list-queues --endpoint-url https://sqs.containerk8s.dev
|
||||
|
||||
**Решение (принято)**: всё выше + grace-продление 2 мин при сетевой ошибке для ранее валидного токена.
|
||||
TTL 5 мин; отозванный токен умирает максимум через 5 мин; изоляция тенантов не затрагивается.
|
||||
|
||||
---
|
||||
|
||||
## v0.1.34 — кэш валидации JWT (14.08.2026)
|
||||
|
||||
**Проблема**: jwtMiddleware валидировал токен через Nubes-шлюз на КАЖДЫЙ запрос консоли;
|
||||
шлюз нестабильно отвечает с IP платформы (то 200, то 401) → консоль периодически падала.
|
||||
|
||||
**Реализовано** (по плану Sonnet):
|
||||
1. `app/auth/cache.go`: кэш успешной валидации в памяти: `map[hex(sha256(token))]{validUntil}` +
|
||||
`sync.RWMutex`, TTL 5 мин, grace +2 мин при сетевой ошибке для ранее валидного токена,
|
||||
фоновая очистка (ticker 5 мин, sync.Once).
|
||||
2. `app/auth/jwt.go`: sentinel `ErrTokenRejected` (`%w`) для 401/403 — отличие от сетевых ошибок.
|
||||
3. `app/admin/admin.go`: `jwtAuth` — всегда свежая проверка + `WarmTokenCache` после успеха;
|
||||
`jwtMiddleware` — `PingNubesAPICached`; `NewHandler` — старт очистки.
|
||||
|
||||
**Проверено локально (мок-шлюз)**: логин с живым моком → 200; мок убит → логин 403 (свежо, правильно),
|
||||
CREDS → 200 по кэшу (шлюз не нужен), неизвестный токен → 403. Vet/тесты OK.
|
||||
|
||||
**Smoke на проде**: 11 PASS, 1 FAIL — только логин (шлюз режет IP платформы; по дизайну логин всегда свежо).
|
||||
SQS-цикл create→send→receive→delete→delete-queue — PASS.
|
||||
|
||||
**Особенность платформы**: GET /ui через ingress не закрывает соединение (~150с, curl exit 28),
|
||||
внутри пода мгновенно. В smoke /ui проверяется range-запросом (206, 0.2с).
|
||||
Браузеру не мешает (HTML приходит сразу).
|
||||
|
||||
**Деплой**: v0.1.34 digest `sha256:17f9bbdb…`, под Ready, /health → v0.1.34.
|
||||
|
||||
Reference in New Issue
Block a user