HISTORY: Q&A Sonnet по кэшу валидации JWT

This commit is contained in:
“Naeel”
2026-08-14 14:06:45 +04:00
parent 5679348f65
commit 0d5dbaba4f
+21
View File
@@ -334,3 +334,24 @@ SQS API, /health, /, /metrics не затронуты.
Совпадают с расчётным SHA256(email) — email-идентичность v0.1.28 работает.
Smoke-тест: `aws sqs list-queues --endpoint-url https://sqs.containerk8s.dev.nubes.ru`
с этими ключами → 200, `{"QueueUrls": []}`. SigV4-аутентификация на проде подтверждена.
---
## Q&A с Claude Sonnet — кэш валидации JWT (14.08.2026)
**Запрос**: файлы только `app/auth/jwt.go`, `app/admin/admin.go`; задача — кэш успешной валидации
токена (TTL 5 мин) из-за нестабильного шлюза Nubes.
**Ответ Sonnet**:
1. Кэш — в auth (новый `app/auth/cache.go`): `PingNubesAPICached`, `WarmTokenCache`, `StartTokenCacheCleanup`.
В admin.go: jwtMiddleware → PingNubesAPICached; jwtAuth → свежая проверка + WarmTokenCache; NewHandler → cleanup.
2. Ключ `hex(sha256(token))`; `map[string]tokenCacheEntry{validUntil}` + `sync.RWMutex`
(не sync.Map — нужна итерация при очистке); уборщик — ticker 5 мин.
3. `ErrTokenRejected` (sentinel, `%w`) — отличать 401/403 от сетевых ошибок; сигнатура PingNubesAPI не меняется.
4. Таблица: HIT → nil; MISS+2xx → записать; MISS+401/403 → удалить, вернуть ошибку;
MISS+сетевая → ошибка; протухший+сетевая → опция grace +2 мин (принято).
5. Гонки: параллельные MISS безвредны (singleflight избыточен); запись в кэш до проверки ctx;
рестарт пода сбрасывает кэш (норма); exp проверяется локально ДО кэша/шлюза.
**Решение (принято)**: всё выше + grace-продление 2 мин при сетевой ошибке для ранее валидного токена.
TTL 5 мин; отозванный токен умирает максимум через 5 мин; изоляция тенантов не затрагивается.