BR 2.6 — Auth Service

Репозиторий

nearbyErp/erp-auth-service

Auth Service не модифицируется по контракту

Endpoint POST /internal/auth/validate уже реализован и возвращает permissions[]. Задачи в этом файле — операционные: выпуск токена и проверка корректности.

Задачи

1. Выпустить service-token для Photo Studio Service (с ротацией)

  • Сгенерировать AUTH_SERVICE_TOKEN для сервиса gensvc (строка, ≥32 байта энтропии, base64url)
  • Зафиксировать токен в .env Photo Studio Service (переменная AUTH_SERVICE_TOKEN)
  • Убедиться что Auth Service принимает этот токен в заголовке X-Service-Token и не возвращает 401 UNAUTHORIZED
  • Реализовать поддержку ротации: Auth Service должен принимать одновременно «текущий» и «предыдущий» токен (AUTH_SERVICE_TOKENS=token_new,token_old). Grace-period 7-30 дней. После переключения Photo Studio на новый токен — старый удаляется.
  • Документировать процедуру ротации (раннер раз в 90 дней или по инциденту)

Принято: ротируемый secret

Service-token — строка с ротацией (не фиксированная). Решено 2026-05-07. Grace-period в Auth Service позволяет выкатить новый токен без даунтайма потребителей.

2. Проверить ответ /internal/auth/validate для пользователя с gensvc.* permissions

  • После выполнения задач User Service (добавление ключей в каталог) — выполнить тестовый вызов POST /internal/auth/validate с токеном пользователя, у которого назначены gensvc.* permissions
  • Убедиться что в ответе поле permissions содержит нужные ключи:
    {
      "valid": true,
      "permissions": ["gensvc.access", "gensvc.photo.create", "gensvc.history.read"]
    }
  • Убедиться что Redis-кэш user_permissions:{user_id} инвалидируется корректно после изменения ролей (через TTL 60 сек или ручную инвалидацию)

3. Добавить gensvc.* в перечень валидных permission-ключей Auth Service (если есть валидация)

  • Проверить — есть ли в коде Auth Service валидация списка допустимых permission-ключей (whitelist)
  • Если есть — добавить все 6 ключей: gensvc.access, gensvc.photo.create, gensvc.history.read, gensvc.history.read.all, gensvc.delete, gensvc.preset.admin
  • Если нет валидации — этот пункт не нужен (ключи проходят как строки)

Связанные контракты

Ссылки