HISTORY: Q&A Sonnet по кэшу валидации JWT
This commit is contained in:
@@ -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 мин; изоляция тенантов не затрагивается.
|
||||
|
||||
Reference in New Issue
Block a user