Files
stats-gateway/docs/AUTH.md
T

2.4 KiB

Auth для Tunnel-метода

Bearer JWT (HS256), HMAC signing secret в /etc/stats-gateway/jwt.key.

Claims

  • sub — client-id (bergamot-laptop, bergamot-phone, ...)
  • scopetunnel (только этот scope разрешён для Tunnel-метода)
  • iat, exp — стандартные UNIX timestamps
  • jti — random hex для аудита/revocation

Выпуск нового токена

На gitea-узле от пользователя с доступом к jwt.key:

sudo -u stats /usr/local/bin/stats-issue-token --sub <client-id> --days <N>

(Helper-скрипт issue-token.sh устанавливается на сервер в Task 11 как Go-binary stats-issue-token.)

Локальный путь во время разработки — experiments/grpc-tunnel/issue-token.sh. Семантика идентична Go-варианту.

Revocation

Опции (по убыванию агрессивности):

  1. Polite revocation (один client) — добавить jti отзываемого токена в /etc/stats-gateway/revoked.txt (формат: один jti на строку, # в начале строки — комментарий). Сервис подгружает на каждом запросе.
  2. Mass revocation (все клиенты) — openssl rand -hex 32 > /etc/stats-gateway/jwt.key, systemctl restart stats-gateway. Затем переиздать токены живым клиентам и раздать оффлайн.

Polite revocation реализуется в Task 11 (через LoadRevokedFile). Для старта — только rotation.

Ротация secret

Раз в год минимум. Перед сменой:

  1. Выпустить новые токены клиентам с новым ключом (НЕ deploy ещё на сервер)
  2. Раздать токены оффлайн (мессенджер, не plain SMS)
  3. Заменить ключ на сервере, restart
  4. Старые токены немедленно невалидны

Storage клиентского токена

На клиенте — ~/.psp/token mode 600. CLI читает только этот файл (см. psp-stats-cli connect --token-file). Не коммитить токены в репозитории, не передавать через email/Slack без e2e.