Добавить nginx admission budget для POST /api/v1/auth/login и /api/v1/auth/register, решение владельца по WealthLedger/backend#73: только nginx limit_req, регистрацию оставить открытой. Внешняя HTTPS proxy chain пока неизвестна.
Scope
Использовать один глобальный ключ на точные auth paths (не доверять непроверенному X-Forwarded-For; иные API запросы не лимитировать), 2r/s, burst=5 nodelay, 429 при переполнении. Отказ до upstream/bcrypt, восстановление по budget без блокировки аккаунта. Не добавлять Redis/CAPTCHA.
Acceptance Criteria
nginx -t проходит на production image.
Изолированная серия POST на login/register получает 429 после переполнения и после паузы снова допускается; frontend auth показывает существующую общую ошибку без logout.
Публичные прочие API и SPA не затронуты.
Ограничение общей квоты и неизвестность внешней proxy chain записаны в backend#73; для per-client лимита требуется отдельное подтверждение trusted IP chain.
## Результат
Добавить nginx admission budget для POST `/api/v1/auth/login` и `/api/v1/auth/register`, решение владельца по WealthLedger/backend#73: только nginx `limit_req`, регистрацию оставить открытой. Внешняя HTTPS proxy chain пока неизвестна.
## Scope
Использовать один глобальный ключ на точные auth paths (не доверять непроверенному X-Forwarded-For; иные API запросы не лимитировать), `2r/s`, `burst=5 nodelay`, 429 при переполнении. Отказ до upstream/bcrypt, восстановление по budget без блокировки аккаунта. Не добавлять Redis/CAPTCHA.
## Acceptance Criteria
- [ ] `nginx -t` проходит на production image.
- [ ] Изолированная серия POST на login/register получает 429 после переполнения и после паузы снова допускается; frontend auth показывает существующую общую ошибку без logout.
- [ ] Публичные прочие API и SPA не затронуты.
- [ ] Ограничение общей квоты и неизвестность внешней proxy chain записаны в backend#73; для per-client лимита требуется отдельное подтверждение trusted IP chain.
Cross-repo: WealthLedger/backend#73, frontend owner of docker/nginx.conf.
Local implementation in working tree branch fix/155-auth-admission-and-events-contract: nginx shared key only on exact POST:/api/v1/auth/login and POST:/api/v1/auth/register, 2r/s + burst 5 nodelay, 429. nginx -t PASS. Isolated two-container check (proxy has backend DNS, but test upstream does not listen :3000): burst 6 requests forwarded and returned 502, next 6 rejected with 429; 4s later POST forwarded again (502). GET login, POST logout not throttled. This proves nginx rejection/recovery before upstream proxy; real backend bcrypt and external HTTPS proxy chain remain unverified. Frontend npm run verify PASS. Shared budget can be exhausted by one client; per-IP limit requires verified trusted chain.
Local implementation in working tree branch `fix/155-auth-admission-and-events-contract`: nginx shared key only on exact `POST:/api/v1/auth/login` and `POST:/api/v1/auth/register`, 2r/s + burst 5 nodelay, 429. `nginx -t` PASS. Isolated two-container check (proxy has backend DNS, but test upstream does not listen :3000): burst 6 requests forwarded and returned 502, next 6 rejected with 429; 4s later POST forwarded again (502). GET login, POST logout not throttled. This proves nginx rejection/recovery before upstream proxy; real backend bcrypt and external HTTPS proxy chain remain unverified. Frontend `npm run verify` PASS. Shared budget can be exhausted by one client; per-IP limit requires verified trusted chain.
Изменения слиты в develop: frontend PR #156, CI run 1956 commits/security/verify PASS. Изолированная nginx-проверка 429/refill PASS; текущая auth форма показывает общую ошибку при любом отказе запроса. Продуктовый rollout и trusted внешняя proxy chain ещё не проверены; это остаётся в WealthLedger/backend#73.
Изменения слиты в `develop`: frontend PR #156, CI run 1956 commits/security/verify PASS. Изолированная nginx-проверка 429/refill PASS; текущая auth форма показывает общую ошибку при любом отказе запроса. Продуктовый rollout и trusted внешняя proxy chain ещё не проверены; это остаётся в WealthLedger/backend#73.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Результат
Добавить nginx admission budget для POST
/api/v1/auth/loginи/api/v1/auth/register, решение владельца по WealthLedger/backend#73: только nginxlimit_req, регистрацию оставить открытой. Внешняя HTTPS proxy chain пока неизвестна.Scope
Использовать один глобальный ключ на точные auth paths (не доверять непроверенному X-Forwarded-For; иные API запросы не лимитировать),
2r/s,burst=5 nodelay, 429 при переполнении. Отказ до upstream/bcrypt, восстановление по budget без блокировки аккаунта. Не добавлять Redis/CAPTCHA.Acceptance Criteria
nginx -tпроходит на production image.Cross-repo: WealthLedger/backend#73, frontend owner of docker/nginx.conf.
Local implementation in working tree branch
fix/155-auth-admission-and-events-contract: nginx shared key only on exactPOST:/api/v1/auth/loginandPOST:/api/v1/auth/register, 2r/s + burst 5 nodelay, 429.nginx -tPASS. Isolated two-container check (proxy has backend DNS, but test upstream does not listen :3000): burst 6 requests forwarded and returned 502, next 6 rejected with 429; 4s later POST forwarded again (502). GET login, POST logout not throttled. This proves nginx rejection/recovery before upstream proxy; real backend bcrypt and external HTTPS proxy chain remain unverified. Frontendnpm run verifyPASS. Shared budget can be exhausted by one client; per-IP limit requires verified trusted chain.Изменения слиты в
develop: frontend PR #156, CI run 1956 commits/security/verify PASS. Изолированная nginx-проверка 429/refill PASS; текущая auth форма показывает общую ошибку при любом отказе запроса. Продуктовый rollout и trusted внешняя proxy chain ещё не проверены; это остаётся в WealthLedger/backend#73.