graph LR
A[Login] --> B[Access Token JWT 15min]
A --> C[Refresh Token SHA-256 в DB]
C --> D[HttpOnly Cookie SameSite=Strict]
B --> E[Bearer Authorization Header]
D --> F[/auth/refresh → rotation]
F --> G[Token reuse → RevokeAll]
| Область | Решение | Документ |
|---|---|---|
| Refresh token storage | SHA-256 хеш в PostgreSQL | [[decision-jwt-refresh-storage]] |
| Concurrent refresh | DeleteIfExists + проверка rows_affected |
[[atomic-refresh-token-race-condition]] |
| CSRF | SameSite=Strict для refresh cookie |
[[atomic-csrf-protection]] |
| Rate limiting | Redis + in-memory fallback, per-IP через X-Forwarded-For |
[[backend-rate-limiting]] |
| WebSocket | per-connection rate limiter, глобальный лимит соединений | [[atomic-websocket-origin-check]] |
| Error exposure | Скрытие деталей в production (500 + validation) | [[decision-validation-error-production]] |
AllowedOrigins_FILE suffix для Docker secrets, валидация при стартеhttp.MaxBytesReader (1 MB лимит)_ в начале TLS в коде? (✓ нет прямых TLS настроек — всё через Caddy)any или interface{} в публичных API? (✓ в writeJSON(v interface{}) — допустимо, это транспорт)#security #MOC #backend #auth #production